0

在類實例化和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]屬性的作品,一切都表現爲正常。

回答

0

在你的例子中,你有兩個單獨的測試類。 默認情況下,xUnit v2將並行運行這些測試。

我遇到過同樣的問題,但在我的情況下使用靜態MockRepository.GenerateMock。 跨並行測試使用的靜態類會導致異常。 測試失敗的表面隨機性取決於首先運行哪些測試。

我可以看到兩種選擇。 1.在單個類中進行測試 - 實際上並不可行 2.使用XUnit Collection屬性將所有測試類放在同一個集合中 - 這對我很有用。

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

另一種替代方法是使用以下屬性關閉並行性的xUnit在測試組件

[組件:CollectionBehavior(DisableTestParallelization =真)]