Uso de Moq para simular un método asíncrono para una prueba unitaria

Estoy probando un método para un servicio que hace una web.API llamada. Usando un normalHttpClient funciona bien para pruebas unitarias si también ejecuto el servicio web (ubicado en otro proyecto en la solución) localmente.

Sin embargo, cuando verifico mis cambios, el servidor de compilación no tendrá acceso al servicio web, por lo que las pruebas fallarán.

He ideado una forma de evitar esto para mis pruebas de unidad creando unIHttpClient Interfaz e implementación de una versión que uso en mi aplicación. Para las pruebas unitarias, hago una versión simulada completa con un método posterior asíncrono simulado. Aquí es donde me he encontrado con problemas. Quiero devolver un OKHttpStatusResult para esta prueba particular. Para otra prueba similar devolveré un mal resultado.

La prueba se ejecutará pero nunca se completará. Se cuelga en la espera. Soy nuevo en la programación asíncrona, los delegados y el propio Moq, y he estado buscando SO y google durante un tiempo aprendiendo cosas nuevas, pero todavía no puedo superar este problema.

Aquí está el método que estoy tratando de probar:

public async Task<bool> QueueNotificationAsync(IHttpClient client, Email email)
{
    // do stuff
    try
    {
        // The test hangs here, never returning
        HttpResponseMessage response = await client.PostAsync(uri, content);

        // more logic here
    }
    // more stuff
}

Aquí está mi método de prueba de unidad:

[TestMethod]
public async Task QueueNotificationAsync_Completes_With_ValidEmail()
{
    Email email = new Email()
    {
        FromAddress = "bob@example.com",
        ToAddress = "bill@example.com",
        CCAddress = "brian@example.com",
        BCCAddress = "ben@example.com",
        Subject = "Hello",
        Body = "Hello World."
    };
    var mockClient = new Mock<IHttpClient>();
    mockClient.Setup(c => c.PostAsync(
        It.IsAny<Uri>(),
        It.IsAny<HttpContent>()
        )).Returns(() => new Task<HttpResponseMessage>(() => new HttpResponseMessage(System.Net.HttpStatusCode.OK)));

    bool result = await _notificationRequestService.QueueNotificationAsync(mockClient.Object, email);

    Assert.IsTrue(result, "Queue failed.");
}

¿Qué estoy haciendo mal?

Gracias por tu ayuda.