下異步xUnit.net
測試與帶有async
修改一個lambda
未能通過報告,沒有異常被拋出:如何處理xUnit中的Tasks引發的異常.net的Assert.Throws <T>?
[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
}
爲什麼Assert.Throws<T>
與lambda
標有async
修改失敗?
這是一個已知的問題:http://xunit.codeplex.com/workitem/9799 – DaveShaw
+1它似乎在快照'03e3be9a6781'中被修復,快照'16883cb2351f'之前已經關聯了2.0.0-alpha版本。但是,在使用NuGet Package Manager更新解決方案後,它仍然不起作用。 –