玩具示例代码:
public abstract class testBase
{
public testBase()
{
//Some common test setup code, which will initialize ManagerClass
}
}
public class someTests: testBase
{
public someTests()
{
//someTests-specific constructor code.
}
[Theory]
[PropertyData("MyTestData")]
public void test1(Foo foo)
{
//Use foo to do a test
}
public static IEnumerable<object[]> MyTestData
{
get
{
yield return new object[] { ManagerClass.CreateANewFoo(1) };
yield return new object[] { ManagerClass.CreateANewFoo(42) };
}
}
}
在上面的示例中,如果我专门运行 test1(我使用的是 Resharper,但当我使用 xUnit GUI 时也会出现问题)我的测试失败,因为似乎 testBase 和 someTests 构造函数都没有被执行。因此,对 ManagerClass.CreateANewFoo() 的调用会引发 NullReference。
如果我在 someTests 或任何其他单独的测试中运行所有测试,则构造函数将按预期执行,并且测试以预期的方式进行。唯一将 test1 标记为不同的是它正在使用 PropertyData 属性。
任何想法为什么会发生这种情况/我做错了什么?