2010-06-10 3 views
11

순환 적 복잡성 (한숨)이있는 한 가지 방법을 테스트하고 테스트 클래스 내에 클래스를 갖고 싶습니다. 메소드 테스트 클래스가 노드로 나타납니다. 나무. Nunit과 어떻게 가능합니까?Nunit : 테스트가 중첩 된 것처럼 보이게 할 수 있습니까?

MyEntityTests 
| 
L_ MyComplexMethodTests 
    L when_some_condition_than 
    L when_some_other_condition_than 

[TestFixture] 
public class MyEntityTests 
{ 
    [TestFixture] 
    public class MyComplexMethodTests 
    { 
    [Test] 
    public void when_some_condition_than() {} 
    etc..... 

    } 
} 
+0

당신이 테스트를 중첩에 의해 달성하려고하는거야? – Pedro

+0

질문에서 그렇게 명확하지 않습니까? – epitka

+0

일부 테스트 만 실행하고 다른 테스트는 실행하지 않으시겠습니까? 시각적으로 분리하기 위해서만 필요합니까? – Pedro

답변

17

질문의 예제 코드와 매우 흡사 한 중첩 클래스를 사용하여 구현할 수 있습니다.

유일한 차이점은 외부 클래스가 구조체에만 사용되고 테스트 자체가없는 경우 [TestFixture] 속성이 필요하지 않다는 것입니다.

당신은 또한 모든 내부 클래스는 외부 클래스로 퍼팅과 내부 클래스를 가지고함으로써, Setup 방법을 공유하고있는 외부 클래스에서 상속 할 수 있습니다

using NUnit.Framework; 

namespace My.Namespace 
{ 
    public class MyEntityTests 
    { 
     [SetUp] 
     public void Setup() 
     { 
     } 

     [TestFixture] 
     public class MyComplexMethodTests : MyEntityTests 
     { 
      [Test] 
      public void when_some_condition_than() 
      { 
      } 

      [Test] 
      public void when_some_other_condition_then() 
      { 
      } 
     } 
    } 
} 

NUnit과 GUI,이 테스트 클래스는 것입니다 다음과 같이 :

NUnit GUI

+3

Resharper의 테스트 주자는이 방법으로 구조화 된 테스트를 인식하지만 무시합니다. : \ –

+0

@JohnHoerr ReSharper의 최신 버전에서는이 기능이 작동합니다. –

+0

내부 클래스가 추가 SetUp 메서드를 가질 수 있는지 알고 있습니까? 그렇다면 모든 클래스에 대해 클래스 와이드 설정이 발생할 수 있으며 내부 클래스 내부에서 메서드 별 설정이 발생할 수 있습니다. 신경 쓰지 마시고 https://stackoverflow.com/questions/17659213/nunit-and-setup-in-base-classes에서 답변을 찾으십시오. – IronSean

1

테스트 할 클래스가 하나 있지만 실행하기 위해 두 세트/유형의 테스트가있는 것 같습니다. 가장 쉬운 방법은 두 개의 TestFixture를 각각 하나씩 만드는 것입니다. 이를 수행하는 또 다른 방법은 각 테스트를 카테고리에 배치하는 것입니다.

편집 : 모든 테스트가 같은 방법으로 수행되는 경우, 하나의 옵션은 TestCase 속성을 사용하고 각 테스트의 매개 변수 (예상되는 결과뿐 아니라)를 지정하는 것입니다. GUI는 각 TestCase 매개 변수 세트를 중첩합니다 해당 테스트 이름의 단일 인스턴스에서 이것은 모든 테스트가 유사하게 동작 할 것으로 가정합니다. 즉, 동일한 기본 Asserts 또는 ExpectedExceptions를 의미합니다. (? 학대)

6

나는이 동작을 얻기 위해 네임 스페이스를 사용했습니다 :

namespace MyEntityTests.MyComplexMethodTests 
{ 
    [TestFixture] 
    public class when_some_condition_than 
    { 
     [Test] 
     public void it_should_do_something() 
     {   
     } 
    } 

    [TestFixture] 
    public class when_some_other_condition_than 
    { 
     [Test] 
     public void it_should_do_something_else() 
     {   
     } 
    } 
} 

당신에게 줄 것이다 : 나는 일반적으로를 정의 할 TestFixture를 사용합니다이 경우

MyEntityTests 
- MyComplexMethodTests 
    - when_some_condition_than 
    - it_should_do_something 
    - when_some_other_condition_than 
    - it_should_do_something_else 

을 테스트를위한 컨텍스트.

+0

+1 - 내 현재 필요에 맞는 좋은 해결책. – JOpuckman

관련 문제