问题描述
我使用 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");
}
}