0

클래스 인스턴스와 TestDriven.Net (v4.0.3478) 또는 XUnit (v2.2.0), RhinoMocks (v3.6.1) 및 structuremap.automocking과 관련된 몇 가지 문제가 있습니다. v4.0.0.315). 이 코드를 감안할 때XUnit, RhinoMocks 또는 TestDriven.Net 문제

:

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; } 
} 

모든 테스트는 잘 나가 마우스 오른쪽 버튼을 클릭하면 실행 ->Run Test(s) 특정 시험 방법 또는 특정 클래스 정의에.

프로젝트, 위의 클래스의 네임 스페이스 정의 또는 테스트가 포함 된 폴더를 마우스 오른쪽 버튼으로 클릭하면 테스트가 실패합니다.

오류는 NullReferenceException이며, 어설 션 할 때 스텁의 데이터 인 것 같습니다. 무작위, 때로는 Tests1.passing_test이 실패하고 때로는 Tests2.passing_test이 실패합니다. 둘 다 결코.

RhinoAutoMocker 및/또는 MockRepository은 테스트 픽스처간에 재설정되지 않아야한다고 생각하십니까?

업데이트 : XUnit [Fact] 속성 대신 NUnit [Test]을 사용하여 문제를 표시하는 코드를 간소화하고 모든 것이 정상적으로 작동합니다.

답변

0

예제에서 두 개의 별도 테스트 클래스가 있습니다. 기본적으로 xUnit v2는 이러한 테스트를 병렬로 실행합니다.

동일한 문제가 발생했지만 제 경우 정적 MockRepository.GenerateMock을 사용합니다. 병렬 테스트에서 정적 클래스가 사용되면 예외가 발생합니다. 테스트 실패의 보이는 임의성은 어떤 테스트가 먼저 실행되는지에 따라 다릅니다.

내가 볼 수있는 두 가지 대안이 있습니다. 1. 단일 클래스의 테스트 - 실제로는 작동하지 않음 2. 모든 테스트 클래스를 동일한 컬렉션에 배치하려면 XUnit Collection 속성을 사용하십시오.

볼 : [: CollectionBehavior (DisableTestParallelization = TRUE) 조립]

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

또 다른 대안은 테스트 어셈블리

을에 다음과 같은 속성을 사용하여 xUnit의 병렬 처리를 해제하는 것입니다