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

时间:2019-05-28 11:28:55

标签: c# .net unit-testing asynchronous vs-unit-testing-framework

[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语句(失败,因为显然它没有完成方法)。然后继续进行其余的方法。

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

1 个答案:

答案 0 :(得分:2)

使您的测试方法也异步public async Task TestMethod1()并在测试await testClass.Method();中等待。我不确定MSTest,但可以与xUnit一起使用。

同样,如下面的注释中所述,您应该使用public async Task Method1()。阅读Async/Await - Best Practices in Asynchronous Programming