【发布时间】:2012-12-14 15:05:15
【问题描述】:
以下异步xUnit.net 测试使用lambda 标记async 修饰符失败,报告未引发异常:
[Theory, AutoWebData]
public async Task SearchWithNullQueryThrows(
SearchService sut,
CancellationToken dummyToken)
{
// Fixture setup
// Exercise system and verify outcome
Assert.Throws<ArgumentNullException>(async () =>
await sut.SearchAsync(null, dummyToken));
// Teardown
}
为了确保ArgumentNullException 被实际抛出,我明确使用了try-catch 块。它有效,但是生成的代码并不干净(与第一次测试相比):
[Theory, AutoWebData]
public async Task SearchWithNullQueryThrows(
SearchService sut,
CancellationToken dummyToken)
{
// Fixture setup
var expected = typeof(ArgumentNullException);
Type actual = null;
// Exercise system
try
{
await sut.SearchAsync(null, dummyToken);
}
catch (ArgumentNullException e)
{
actual = e.GetType();
}
// Verify outcome
Assert.Equal(expected, actual);
// Teardown
}
为什么带有lambda 标记为async 修饰符的Assert.Throws<T> 会失败?
【问题讨论】:
-
这是一个已知问题:xunit.codeplex.com/workitem/9799
-
+1 它似乎已在快照
03e3be9a6781中修复,该快照位于与发布2.0.0-alpha关联的快照16883cb2351f之前。但是使用 NuGet 包管理器更新解决方案后它仍然无法正常工作。
标签: c# async-await c#-5.0 xunit.net