2014-10-31 3 views
3

나는 추상 메소드를 가진 추상 클래스를 가지고 있으며,이 메소드를 오버라이드하는 서브 클래스는 특정 계약을 유지해야한다. (이 아니라은 .NET의 코드 계약을 의미하며, 코드 계약 그 자체의 개념). 이 계약의 테스트 코드는 동일 할 수 있습니다. DRY (반복하지 말고) 원칙을 유지하면서 모든 하위 클래스에서 NUnit을 사용하여이 계약을 테스트 할 수 있습니까?NUnit으로 계약을 테스트하려면 어떻게해야합니까?

(내 통제가 불가능하고이 질문과 관련이없는 이유 때문에 NUnit이 붙어 있습니다.)

+0

주어진 파생 클래스의 특정 구현 이외에 어떤 테스트를 수행 하시겠습니까? –

+0

모든 파생 클래스가 구현해야하는 계약을 테스트하고 싶습니다. 파생 클래스 각각에 대해 테스트를 작성하면 클래스 이름을 제외하고는 똑같은 코드가됩니다. –

답변

3

구현을 테스트하기 위해 추상 메소드를 사용하여 기본 테스트 클래스를 생성 한 다음 테스트 할 파생 클래스마다 파생 인스턴스를 생성 할 수 있습니다. 이

[TestClass] 
public abstract class TestBase 
{ 
    protected abstract IMyInterface GetObjectToTest(); 

    [Test] 
    public void TestMethod() 
    { 
      IMyInterface objectToTest = GetObjectToTest(); 
      //Do your generic test of all implementations of IMyInterface 
      objectToTest.Setup(); 
      //... 
      Assert.Equal(objectToTest.Property,100); 
      //etc 
    } 
} 

[TestClass] 
public class ConcreteTestClass : TestBase 
{ 
    protected override GetObjectToTest() 
    { 
     return new ConcreteImplementationOfIMyObject(); 
    } 

    [Test] 
    public void TestConcreteImplementationOfIMyObjectSpecificMethod() 
    { 
     //test method for stuff which only applies to ConcreteImplementationOfIMyObject types 
    } 
} 

같은

뭔가 있다는 점에서 특정 구현에 고유 한 모든 테스트를 넣어 그런 다음 기본 클래스에서 인터페이스의 모든 인스턴스에 적용하여 모든 테스트를 넣고,이 방법을 사용하여 테스트 클래스.

관련 문제