Dmi*_*try 35 .net unit-testing asynchronous xunit.net
所以我有一个如下测试:
    [Fact]
    public void Test1()
    {
        Assert.ThrowsAsync<ArgumentNullException>(() => MethodThatThrows());
    }
    private async Task MethodThatThrows()
    {
        await Task.Delay(100);
        throw new NotImplementedException();
    }
令我惊讶的是,Test1成功通过.为了让它失败,我必须这样写:
Assert.Throws<ArgumentNullException>(() => MethodThatThrows().Wait());
ThrowsAsync()的目的是什么,如果它在上面的场景中不起作用?
Rub*_*ink 62
你应该await得到结果(参见xunit的验收测试).
[Fact] public async Task Test1()
{
    await Assert.ThrowsAsync<ArgumentNullException>(() => MethodThatThrows());
}
在这个特定的退化情况下,你可以只return在Task那Assert.ThrowsAsync产生不使用await,但关键的是,你需要手工将导致Task回的xUnit框架,即
[Fact]
public Task Test1() =>
    Assert.ThrowsAsync<ArgumentNullException>(MethodThatThrows);
Sak*_*ket 26
以防万一有人想分离 Act 和 Assert 部分,可以使用以下代码:
//Act
Task result() => systemUnderTest.AsyncMethodThatThrows();
//Assert
await Assert.ThrowsAsync<Exception>(result); 
| 归档时间: | 
 | 
| 查看次数: | 11753 次 | 
| 最近记录: |