Prueba de excepciones en métodos asincrónicos

Estoy un poco atascado con este código (esto es una muestra):

public async Task Fail()
{
    await Task.Run(() => { throw new Exception(); });
}

[Test]
public async Task TestFail()
{
    Action a = async () => { await Fail(); };
    a.ShouldThrow<Exception>();
}

El código no detecta la excepción y falla con

Se esperaba que se lanzara una excepción System.Exception, pero no se produjo ninguna excepción.

Estoy seguro de que me falta algo, pero los documentos parecen sugerir que este es el camino a seguir. Un poco de ayuda sería apreciada.

Respuestas a la pregunta(2)

Su respuesta a la pregunta