我有一个流程,它从一个常规函数(方法签名中没有异步)开始,然后我调用 Task.Run(await () => asyncFunction())。
除了等待而不期待任何回报是不好的做法之外,还有什么方法可以运行单元测试来将代码运行到最后? 目前,一旦单元测试完成,需要在 Task.Run 中运行的任务将被取消,因为该任务是异步的并被放置在任务队列的末尾(据我所知),主线程完成并且任务没有机会运行。
谢谢
编辑:添加MVP:
using System;
using System.Threading.Tasks;
namespace SomeNamespace
{
public class Class1
{
public void Foo()
{
Task.Run(async () => await AsyncMethod());
}
private async Task AsyncMethod()
{
await Task.Delay(3000);
Console.WriteLine("Waited 3 seconds");
}
}
}
和单元测试:
[TestMethod]
public void Debug2()
{
var c = new Class1();
c.Foo();
}
我希望写入行执行
谢谢
答案 0 :(得分:3)
除了等待而不期待任何回报是不好的做法之外,还有什么方法可以运行单元测试来将代码运行到最后?
“即发即弃”的一个原因是一种不好的做法,即调用代码无法知道工作何时完成(或是否完成,或者是否完成并出现错误)。
正是同样的原因使测试变得如此困难。您需要注入某种模拟来检测工作的任何副作用,并在测试中忙等待直到观察到副作用。超时对于允许测试失败(而不是挂起)是必要的,并且超时使您的测试本质上是不稳定的。这就是为什么“即发即忘”是一种不好的做法的一个原因。