MS 测试 DataTestMethod 单个测试超时

问题描述

我使用 MSTest (2.1.2) 并且我有一个数据驱动的测试。

[DataTestMethod]
[ExpenseTypesData]
[Timeout(600000)]
public void ManualExpenseReportTest(string category)
{
}

是否可以为单个数据行测试而不是所有数据行设置超时?

无论我有 2 行还是 200 行,此测试都会在超时时失败。不用说,我不知道将要执行多少测试,因此更改数字不是一种选择。除此之外,我不希望一个卡住的测试保存其他数据行。

解决方法

在 github 上正在进行有关此问题的讨论:https://github.com/microsoft/testfx/issues/728 正如用户期望的那样,TimeoutAttribute 将应用于每个 DataRow。不幸的是,最后一个答案是 2020 年 8 月,因此解决这个问题的希望不大。

如果您确实需要它并且想要构建自己的解决方案,则可以将测试包装在异步 Task 中,并等待每行所需的任何超时。像这样:

[TestClass]
public class TestClass1
{
    private int Timeout => 500;

    [DataTestMethod]
    [DataRow(100)]
    [DataRow(1000)]
    [DataRow(250)]
    [DataRow(1500)]
    [DataRow(100)]
    public void Test1(int delay)
    {
        Task task = Task.Run(() =>
        {
            Thread.Sleep(delay); // Your test goes here

            Assert.IsTrue(true); // Your asserts go here
        });

        if (!task.Wait(Timeout))
            Assert.Fail("Test failed with timeout");
    }
}