Unit testing 单独运行xUnit理论时测试类构造函数不执行?

Unit testing 单独运行xUnit理论时测试类构造函数不执行?,unit-testing,xunit.net,Unit Testing,Xunit.net,玩具示例代码: 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. }

玩具示例代码:

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) };
    }
  }
}
公共抽象类testBase
{
公共测试库()
{
//一些常见的测试设置代码,将初始化ManagerClass
}
}
公共类测试:testBase
{
公开考试
{
//有些测试特定的构造函数代码。
}
[理论]
[属性数据(“MyTestData”)]
公共无效测试1(Foo-Foo)
{
//使用foo进行测试
}
公共静态IEnumerable MyTestData
{
得到
{
返回新对象[]{ManagerClass.CreateANewFoo(1)};
返回新对象[]{ManagerClass.CreateANewFoo(42)};
}
}
}
在上面的示例中,如果我专门运行test1(我使用的是Resharper,但当我使用xunitgui时也会出现问题),那么我的测试将失败,因为似乎既没有执行testBase,也没有执行某些tests构造函数。因此,对ManagerClass.CreateANewFoo()的调用抛出了一个null引用

如果我在某些测试或任何其他单独测试中运行所有测试,则构造函数将按预期执行,测试将按预期方式进行。唯一将test1标记为不同的是,它使用的是PropertyData属性


你知道为什么会这样/我做错了什么吗

我们试图用xUnit.net 1.5 Beta版复制此内容,但无法复制。

免责声明:不要使用xUnit.net。您是否尝试将Console.WriteLine/trace语句放在CTOR中?您确定没有调用ctor吗。。因为我不知道它如何在不创建测试夹具/类实例的情况下运行测试。如果在不同的测试输出中运行所有测试/运行一个测试结果,听起来像是一个bug。Try:如果被命中的是ctor,请尝试使用假值,而不是返回静态方法?在xUnit.NetPuting Console.WriteLine语句中,测试是否在不同的AppDomain中运行。中的语句显示了作为整个类的一部分运行测试时执行的构造函数。但是单独调试(在Writeline语句处使用断点)我在调试器中遇到的第一件事是抛出NullReference,不是断点。这可能是因为出于某种原因,在运行测试之前正在调用静态MyTestData方法,因为不必构造对象来调用静态方法。这个测试夹具设计让我有点不舒服——静态方法依赖于基类ctor才能正确运行。PropertyData方法可以是实例方法吗?尝试将安装代码从基类ctor临时移动到静态方法中,以确认这是否是原因。在进一步讨论CodePlex()之后,我只需要根据执行顺序重构测试。