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

C# 单元测试异步方法在方法完成之前测试断言,c#,.net,unit-testing,asynchronous,vs-unit-testing-framework,C#,.net,Unit Testing,Asynchronous,Vs Unit Testing Framework,和测试等级: [TestMethod] public void TestMethod1() { TestClass testClass = new TestClass(); testClass.Method(); Assert.AreEqual(testClass.x, true); } 我正在测试这种格式的同步方法。但是,当我运行测试时,它会贯穿整个线路 var data=await client.FetchData() 然后,不是继续执行方法,而是首先进入测试方法中

和测试等级:

[TestMethod]
public void TestMethod1()
{
    TestClass testClass = new TestClass();
    testClass.Method();
    Assert.AreEqual(testClass.x, true);
}
我正在测试这种格式的同步方法。但是,当我运行测试时,它会贯穿整个线路 var data=await client.FetchData()

然后,不是继续执行方法,而是首先进入测试方法中的assert语句(失败,因为它显然没有完成方法)。然后继续进行剩下的方法


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

使您的测试方法也成为异步的
公共异步任务TestMethod1()
并在测试中等待
等待testClass.method()。我不确定MSTest是否正确,但它可以与xUnit配合使用


正如下面的注释中所述,您应该使用
公共异步任务方法1()
。阅读。

使您的测试方法也是异步的
公共异步任务TestMethod1()
并在测试中等待
等待testClass.method()。我不确定MSTest是否正确,但它可以与xUnit配合使用


正如下面的注释中所述,您应该使用
公共异步任务方法1()
。阅读。

避免异步无效。被测试的方法和测试方法本身应该返回一个任务。这样就可以等待被测试的方法。使您的测试方法
公共异步任务TestMethod1()
等待testClass.method()请注意,现在可以将测试方法声明为异步,因此应该使用
[TestMethod]公共异步任务TestMethod1()
避免异步无效。被测试的方法和测试方法本身应该返回一个任务。这样就可以等待被测试的方法。使您的测试方法
公共异步任务TestMethod1()
等待testClass.method()
注意,现在您可以将测试方法声明为异步,因此您应该有
[TestMethod]公共异步任务TestMethod1()
,并将
公共异步无效方法()
更改为
公共异步任务方法()
(异步测试方法确实适用于Visual Studio 2017和更高版本的btw)供参考,所有现代测试框架都支持这一点,“现代”是指“很久以前”。像2013年左右。同时将
public async void Method()
更改为
public async Task Method()
(异步测试方法确实适用于Visual Studio 2017和更高版本)仅供参考,所有现代测试框架都支持这一点,其中“现代”是“很久以前”的意思。比如2013年左右。
public async void Method()
{
    if(cond)
        await InnerMethod();
}

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