2015-01-31 1 views
2

나는 EventManager라는 구체적인 클래스와 ScheduledEventManager라는 서브 클래스를 가지고있다. ScheduledEventManager가 EventManager와 동일한 테스트와 몇 가지 추가 테스트를 통과해야합니다. xUnit.net에서 가능합니까?xUnit.net을 사용하여 "상속"할 수 있습니까?

편집 : 방금 저의 경우는 이보다 조금 더 복잡하다는 것을 알았습니다. 내 테스트를보다 체계적으로 관리하기 위해 중첩 클래스를 사용하고 있습니다. 예 :

public class EventManagerTests 
{ 
    public class WhenAnEventIsFired 
    { 
     [Fact] 
     void ItNotifiesSubscribers() 
     { 
      // Perform the test 
     } 
    } 
} 

public class ScheduledEventManagerTests 
{ 
    // How to I inherit the above tests since they are in nested classes? 
} 

이것이 불가능한 것처럼 보이지만 어쩌면 여러분 중 한 명이 천부적 인 것을 알고 있습니다.

+1

는 SUT로 기본 클래스의 인스턴스를 취 매개 변수화 된 테스트를 만들기는, 하위의 인스턴스와 테스트를 호출 수업. –

+0

이것은 훌륭하게 들리지만, 나 자신과 앞으로이 게시물을 찾는 다른 사람들을 위해 모범을 보일 수 있습니까? –

답변

-1

기본 클래스의 인스턴스를 SUT로 사용하고 하위 클래스의 인스턴스로 테스트를 호출하는 매개 변수화 된 테스트를 만듭니다. 여기에 하나 개를 통과 한 실패 테스트 결과 NUnit을 이용하여 (인위적인) 예제 :

public class Foo 
{ 
    public virtual int DoSomething() 
    { 
     return 10; 
    } 
} 

public class Bar : Foo 
{ 
    public override int DoSomething() 
    { 
     return 9; 
    } 
} 

[TestFixture] 
public class Tests 
{ 
    private Foo[] _foos = { new Foo(), new Bar() }; 

    [Test] 
    [TestCaseSource("_foos")] 
    public void When_DoSomething_Is_Invoked_Then_A_Power_Of_Ten_Is_Returned(Foo sut) 
    { 
     Assert.That(sut.DoSomething() % 10, Is.EqualTo(0)); 
    } 
} 
+0

여러분의 코드가 XUnit이 아닌 NUnit을 사용하고 있다고 생각합니다. 그럼에도 불구하고 나는 내 중첩 클래스 접근 방식을 포기하고 당신과 같은 밑줄 접근법을 사용하는 방법을 사용했다. 또한 간단한 상속을 사용하여 클래스간에 테스트를 공유했습니다 (내 경우에는 EventManagerTests에서 상속 된 ScheduledEventManagerTests). 핵심은 EventManagerTests의 테스트가 최소한 보호되어야한다는 것입니다 (공용도 가능). –

+0

그 대답은 NUnit이라고 언급했는데, xUnit의 'TestCaseSource'와 같은 것은'PropertyData'라고 생각합니다. 테스트를'Fact'가 아닌'Theory'로 표시해야합니다. –

관련 문제