【发布时间】:2020-03-15 11:34:41
【问题描述】:
我在 xUnit 中有一个自定义数据属性。
public class MyTest : DataAttribute
{
private readonly int _x;
private readonly int _y;
public MyTest(int x, int y)
{
_x = x;
_y = y;
}
public override IEnumerable<object[]> GetData(MethodInfo testMethod)
{
return new[] { new object[] { _x, _y } };
}
}
然后我有两个测试
[Theory]
[MyTest(100, 200)]
public void Test1(int x, int y)
{
var r = x * y;
Assert.Equal(20000, r);
}
[Theory]
[MyTest(300, 400)]
public void Test2(int x, int y)
{
var r = x * y;
Assert.Equal(120000, r);
}
然后我在MyTest 属性的GetData() 方法中放置断点。然后在测试资源管理器中我右键单击Test1 并单击调试选定的测试。
当我这样做时,我注意到MyTest 属性被执行了两次,分别是Test1 和Test2。我不确定为什么它也会为Test2 执行?
如果我有更多带有MyTest 属性的测试,那么它会为每个测试执行。
有什么办法可以禁用这种行为?
【问题讨论】:
-
我怀疑“运行此测试”首先要收集所有可用测试的信息,然后将“我所要求的”与“可用的”进行匹配。
-
MyTest属性是一个元数据,在运行测试之前会被收集并申请运行测试。 -
随着测试套件的增长,这种开销变得相当沉重,因为每个测试总是会支付所有使用这种属性修饰的测试的总成本。我不记得 NUnit 测试运行器有这种行为。
标签: c# visual-studio xunit xunit.net