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