单元测试异步方法在方法完成之前测试断言

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);
}

并测试class:

public async void Method()
{
    if(cond)
        await InnerMethod();
}

private async Task InnerMethod()
{
    var data = await client.FetchData();
    x = data.res;
}

我正在测试这种格式的同步方法。但是当我 运行 测试时,它 运行s 通过了这条线 var data = await client.FetchData();

然后没有继续执行方法,而是首先进入测试方法中的断言语句(失败,因为显然它没有完成该方法)。然后继续该方法的其余部分。

我真的很困惑为什么要这样做,但我猜测它与线程有关。关于为什么这种行为真的有帮助的任何线索!谢谢

也让您的测试方法异步 public async Task TestMethod1() 并在测试中等待 await testClass.Method();。我不确定 MSTest,但它适用于 xUnit。

也正如下面评论中所写,您应该使用 public async Task Method1()。阅读 Async/Await - Best Practices in Asynchronous Programming.