2012-08-30 3 views
2

위조/가짜 객체의 도움을 받아 단위 테스트를 할 때, 테스트 클래스에 동일한 클래스를 테스트하는 메소드가 포함되어 있으면 SetUp 또는 테스트 메소드 자체의 모의 객체를 초기화하는 것이 더 바람직한지 궁금하다. (따라서 가짜 객체가 필요하다. 모든 테스트 케이스에서 동일해야 함). 이런 식으로 뭔가가 :설치 또는 테스트 케이스에서 mock 객체를 초기화해야합니까?

class FooTests 
{ 
    Mock<IBar> mockBar; 
    Foo fooUnderTest; 

    [SetUp] 
    public void Setup() 
    { 
     mockBar = new Mock<IBar>(); 
     fooUnderTest = new fooUnderTest(mockBar.Object); 
    } 

    [Test] 
    public void MyTest() 
    { 
     //setup mock methods 
     mockBar.SetUp(...) 

     //test 
     fooUnderTest.TestSomething() 

     //assert something here 

    } 
} 

각 테스트 케이스에 mockBar 및 fooUnderTest에 코드를 복제에서 우리를 방지 할 것 같다,하지만 단점은 내가 클래스 변수 mockBar 및 fooUnderTest을 (선언해야한다는 것입니다 또는이 정말입니다 단점이 있습니까?) 몇 가지 특별한 설치가 필요하다면 문제가 될 것입니다 (예를 들어, 일부 테스트 케이스에서 Foo의 가상 메소드 중 일부를 너무 많이 사용하려는 경우). 가장 좋은 방법은 무엇입니까?

답변

4
  • (모의 협력자에 대한 몇 가지 기대를 설정 포함) 스위트/고정에서 모든 테스트하는 설정 방법에 MOVE가 공유하는 몇 가지 일반적인 설치 이있는 경우. (저두 테스트에서 독자들과 관련이없는 부수적 자세한 내용은) 하나의 테스트 케이스 테스트 케이스 내에서 특정 설정 인라인를 추가, 일반적인 설정을 확장하고 싶어
  • 경우 자체
  • 하면 하나 개의 테스트 케이스 는 (중요한 중복 Ɒ이) 서로 다른 테스트 스위트MOVE를 다른 설정을 원하고 설정을 공유하는 다른 메커니즘을 파악 (예를 통해 구성, 유틸리티 방법, 개체 어머니 등)
+0

아주 좋은 그리고 현명한 지침, 고마워. 내 모범을위한 어떤 제안? –

+0

@ LouisRhys - 'Foo의 가상 메소드 중 일부를 무시하고 싶다'는 말을 정교하게 해석 할 수 있습니까? 테스트를 위해 Foo의 다른 하위 클래스를 원한다는 것을 의미합니까? 그렇다면 설정이 다르며 글 머리 기호 # 3이 적용됩니다. – Gishu

관련 문제