假设我们有以下类:
class SampleClass
{
private readonly IList<int> _numberList = new List<int> {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
public void MethodToBeTested()
{
Task.WhenAll(_numberList.Select(async number => { await Task.Run(() => { ProcessNumber(number); }); }));
}
private static void ProcessNumber(int number)
{
Console.WriteLine($"Thread: {Thread.CurrentThread.ManagedThreadId} Number:{number}");
Thread.Sleep(1000);
}
}
我们添加以下单元测试:
[Test]
public void TestMethodToBeTested()
{
var sampleClass = new SampleClass();
_sampleClass.MethodToBeTested();
}
问题在于当测试运行时,它不等待MethodToBeTested执行完毕,因此输出会有所不同。在不更改方法签名(从void到Task)的情况下,有没有办法使用NUnit测试该方法的完整运行?
Task.WhenAll
返回一个任务对象,你需要使用await
来等待它的完成。目前的写法并没有实际执行任何操作。 - Yacoub MassadConsole.ReadLine()
或类似的方法来暂停执行。通过这样做,你可以让MethodToBeTested
运行的任务完成。 - Yacoub Massad