【问题标题】:MS Tests DataTestMethod Timeout for a single test单次测试的 MS 测试 DataTestMethod 超时
【发布时间】:2021-05-08 03:37:45
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: c# automated-tests timeout mstest data-driven-tests


    【解决方案1】:

    在 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");
        }
    }
    

    【讨论】:

    • 谢谢!正如我从article 中发现的那样,将您的方法与 PostSharp 装饰器一起使用将允许创建您自己的 Timeout 装饰器。很遗憾微软忽略了数据驱动的测试超时。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-14
    • 1970-01-01
    相关资源
    最近更新 更多