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 result = await LongRunningMethod(); result.Wait(); val = 10; } [TestMethod] public void TestMehod2() { Assert.AreEqual(10, val); } 

只需为各种初始化调用(每个返回任务)创建一个任务数组,然后使用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() { }