[英]unit testing an async method tests assertions before method has completed
[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語句(失敗,因為顯然它沒有完成該方法)。 然后,繼續進行其余的方法。
我真的很困惑為什么要這樣做,但是我猜它與線程有關。 為什么這種行為真正有用的任何線索! 謝謝
使您的測試方法與public async Task TestMethod1()
異步,並在測試內部await testClass.Method();
。 我不確定MSTest,但可以與xUnit一起使用。
同樣,如下面的注釋中所述,您應該使用public async Task Method1()
。 閱讀Async / Await-異步編程最佳實踐 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.