单元测试异步方法在方法完成之前测试断言
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.
[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.