[TestMethod]
public void TestMethod1()
{
TestClass testClass = new TestClass();
testClass.Method();
Assert.AreEqual(testClass.x, true);
}
和测试班:
public async void Method()
{
if(cond)
await InnerMethod();
}
private async Task InnerMethod()
{
var data = await client.FetchData();
x = data.res;
}
我正在测试这种格式的同步方法。但是当我运行测试时,它贯穿了整个过程 var data = await client.FetchData();
然后不继续执行方法,而是先进入测试方法中的assert语句(失败,因为显然它没有完成方法)。然后继续进行其余的方法。
我真的很困惑为什么要这样做,但是我猜它与线程有关。为什么这种行为真正有用的任何线索!谢谢
答案 0 :(得分:2)
使您的测试方法也异步public async Task TestMethod1()
并在测试await testClass.Method();
中等待。我不确定MSTest,但可以与xUnit一起使用。
同样,如下面的注释中所述,您应该使用public async Task Method1()
。阅读Async/Await - Best Practices in Asynchronous Programming。