2011-10-05 4 views
10

NUnit을 사용하여 통합 테스트를 실행합니다. 이 테스트는 시간이 많이 걸립니다. 실패를 감지하는 유일한 방법은 시간 초과입니다.첫 번째 실패시 NUnit 중지 테스트 실행 방법

단일 실패가 감지 되 자마자 테스트 실행을 중단하고 싶습니다.

이 방법이 있습니까?

+0

나는 이것이 시험 주자 특정 탐구라고 믿습니다. 그래서 어떻게 시험을합니까? NUnit - 콘솔, msbuild NUnit 작업, 다른 러너? – sll

답변

1

이것은 이상적인 해결책은 아니지만 필요한 테스트를 수행합니다. 즉, 테스트가 실패한 경우 나머지 테스트를 무시합니다. 당신이 잠재적에 장식이 속성을 가진 기본 클래스를 생성해야 함 메소드 보호 확인하고 그것에서 모든 TestFixture 클래스를 도출 할 수 있도록 TestFixtureAttribute 이후

[TestFixture] 
    public class MyTests 
    { 
     [Test] 
     public void Test1() 
     { 
      Ascertain(() => Assert.AreEqual(0, 1)); 
     } 

     [Test] 
     public void Test2() 
     { 
      Ascertain(() => Assert.AreEqual(1, 1)); 
     } 

     private static void Ascertain(Action condition) 
     { 
      try 
      { 
       condition.Invoke(); 
      } 

      catch (AssertionException ex) 
      { 
       Thread.CurrentThread.Abort(); 
      } 
     } 
    } 

은 상속입니다.

단점이라면 기존의 모든 어설 션을 리팩터링해야합니다.

+0

그것은 올바른 방향으로 나아가는 단계입니다. 예외는 아니지만 Asserts에 대해서만 작동합니다. 하지만 흥미로운 아이디어입니다 ... 예외 상황에서 비슷한 일을 할 수 있을지도 모릅니다. – willem

+0

@willem 먼저 성공하면 예외에 대한 해결 방법을 게시 할 수 있습니까? 계속 노력하겠습니다. – Raghu

+0

전체 테스트 메서드 본문을 Ascertain에 랩핑하지 않고 모든 예외를 캡처 할 수 있습니까? –

22

nunit-console을 사용하면/stoponerror 명령 줄 매개 변수를 사용하여이 작업을 수행 할 수 있습니다.

명령 줄 참조는 here을 참조하십시오.

+4

나는 이것이 더 나은 접근 방법이라고 생각한다. 프로세스에 개입하는 대신 NUnit이 이것을 처리하게하고 테스트 코드를 불필요한 것들로 오염시킵니다! – mosu

+0

nunit ** 3 ** - console.exe --stoponerror –

6

NUnit 3을 사용하고 있으며 다음 코드가 유용합니다.

public class SomeTests { 
    private bool stop; 

    [SetUp] 
    public void SetUp() 
    { 
     if (stop) 
     { 
      Assert.Inconclusive("Previous test failed"); 
     } 
    } 

    [TearDown] 
    public void TearDown() 
    { 
     if (TestContext.CurrentContext.Result.Outcome.Status == TestStatus.Failed) 
     { 
      stop = true; 
     } 
    } 
} 

또는 추상 클래스로 만들고 파생시킬 수 있습니다.

관련 문제