XUnit,RhinoMocks或TestDriven.Net问题

问题描述:

在类实例化和TestDriven.Net(v4.0.3478)或XUnit(v2.2.0),RhinoMocks(v3.6.1)和structuremap.automocking( v4.0.0.315)。XUnit,RhinoMocks或TestDriven.Net问题

鉴于此代码: - 在特定的测试方法或特定类定义>Run Test(s)

public class Tests1 
{ 
    [Fact] 
    public void passing_test() 
    { 
     var mocker = new RhinoAutoMocker<Subject>(); 
     mocker.Get<IData>().Stub(x => x.Strings).Return(new List<string> {""}); 

     var result = mocker.ClassUnderTest.GetStrings(); 

     result.Count().ShouldEqual(1); 
    } 
} 

public class Tests2 
{ 
    [Fact] 
    public void passing_test() 
    { 
     var mocker = new RhinoAutoMocker<Subject>(); 
     mocker.Get<IData>().Stub(x => x.Strings).Return(new List<string> {""}); 

     var result = mocker.ClassUnderTest.GetStrings(); 

     result.Count().ShouldEqual(1); 
    } 
} 

public class Subject 
{ 
    private readonly IData _data; 

    public Subject(IData data) 
    { 
     _data = data; 
    } 

    public IEnumerable<string> GetStrings() 
    { 
     return _data.Strings; 
    } 
} 

public interface IData 
{ 
    IEnumerable<string> Strings { get; set; } 
} 

所有测试正常,当我右键单击运行。

当我右键单击项目,包含测试的文件夹或上面类的名称空间定义时,测试失败。

错误是NullReferenceException,当做断言时,它似乎是存根的数据。这是随机的,有时Tests1.passing_test失败,有时Tests2.passing_test失败。从来没有。

认为它必须与RhinoAutoMocker和/或MockRepository不在测试夹具之间重置?

UPDATE:简化了代码来说明问题,也给代码完成后,使用NUnit [Test]代替的xUnit [Fact]属性的作品,一切都表现为正常。

在你的例子中,你有两个单独的测试类。 默认情况下,xUnit v2将并行运行这些测试。

我遇到过同样的问题,但在我的情况下使用静态MockRepository.GenerateMock。 跨并行测试使用的静态类会导致异常。 测试失败的表面随机性取决于首先运行哪些测试。

我可以看到两种选择。 1.在单个类中进行测试 - 实际上并不可行 2.使用XUnit Collection属性将所有测试类放在同一个集合中 - 这对我很有用。

看到:http://xunit.github.io/docs/running-tests-in-parallel.html

另一种替代方法是使用以下属性关闭并行性的xUnit在测试组件

[组件:CollectionBehavior(DisableTestParallelization =真)]