MSTEST – 异步Testinitialize保证测试失败
只是想知道,如果有人这样想:
这是在TestInitialize中进行异步调用的错误设计,因为TestInitialize必须在任何TestMethod之前发生。
这可能是以任何方式进行异步TestInitialize的正确方法吗?
private int val = 0; [TestInitialize] public async Task TestMehod1() { var result = await LongRunningMethod(); val = 10; } [TestMethod] public void TestMehod2() { Assert.AreEqual(10, val); }
任何想法?
可能最TestInitialize
方法是让TestInitialize
启动异步操作,如下所示:
[TestClass] public class UnitTestAsync { private Task val = null; [TestInitialize] public void TestInitializeMethod() { val = TestInitializeMethodAsync(); } private async Task TestInitializeMethodAsync() { return await LongRunningMethod(); } private async Task LongRunningMethod() { await Task.Delay(20); return 10; } [TestMethod] public async Task TestMehod2() { Assert.AreEqual(10, await val); } }
你想要做的是使用.Result
或.Wait()
同步阻止TestInitialize
装饰方法。 您可以执行以下操作:
private int val = 0; [TestInitialize] public void TestMehod1() { Task
只需为各种初始化调用(每个返回任务)创建一个任务数组,然后使用Task.WaitAll()
[ClassInitialize()] public static void Initialize(TestContext context) { List tasks = new List (); tasks.Add(InitializeMethod1()); tasks.Add(InitializeMethod2()); Task.WaitAll(tasks.ToArray()); } public static async Task InitializeMethod1() { } public static async Task InitializeMethod2() { }