【发布时间】:2015-03-19 03:39:15
【问题描述】:
根据this discussion,下面两种方法应该没有区别:
public async Task Foo()
{
await DoSomethingAsync();
}
public Task Foo()
{
return DoSomethingAsync();
}
实际上,对于非常简单的方法, 不带 async/await 关键字的调用似乎是首选,因为它们消除了一些开销。
但是,这显然在单元测试中并不总是有效。
MSTest
[TestClass]
public class AsyncTest
{
[TestMethod]
public async Task Test1()
{
await Task.Delay(0);
}
[TestMethod]
public Task Test2()
{
return Task.Delay(0);
}
}
NUnit
[TestFixture]
public class AsyncTest
{
[Test]
public async Task Test1()
{
await Task.Delay(0);
}
[Test]
public Task Test2()
{
return Task.Delay(0);
}
}
XUnit
public class AsyncTest
{
[Fact]
public async Task Test1()
{
await Task.Delay(0);
}
[Fact]
public Task Test2()
{
return Task.Delay(0);
}
}
- 在所有情况下,
Test1通过。 - 在 MSTest 中,
Test2出现在测试运行程序中,但它没有运行。 -
在 NUnit 中,
Test2被忽略,消息为:测试方法具有非空返回类型,但没有预期结果
在 XUnit 中,
Test2通过。
由于在所有情况下任务仍然是等待的,async 关键字影响 NUnit 和 MSTest 测试运行器的原因是什么?也许是一些反射问题?
【问题讨论】:
-
其实
Test1和Test2之间有certain difference :) -
@Noseratio - 谢谢!
标签: c# unit-testing nunit async-await mstest