2009-03-13 5 views
0

나는 순간에 다음과 같은 역할을하는 클래스가 :RhinoMock이이 테스트를 실패하지 않는 이유는 무엇입니까?

public class MyClass { 

    public void Method1(){ 
     if (false) { 
      Method2(); 
     } 
    } 

    public void Method2(){ 
     //do something here 
    } 
} 

그래서 방법 2가 호출되지 않습니다 (내 코드는 조금 다르게 보입니다하지만 실행하지 않습니다 때문에 false로 평가하고이 경우 절을 Method2. 디버깅을 통해 확인했습니다.). RhinoMock에 Method2가 호출되고 테스트가 실패 할 것이라고 예상하고 싶습니다.

MockRepository mock = new MockRepository(); 
MyClass presenter = mock.PartialMock<MyClass>(); 

Expect.Call(() => presenter.Method2()).IgnoreArguments(); 

mock.ReplayAll(); 
presenter.Method1(); 
mock.VerifyAll(); 

...하지만 테스트가 통과됩니다.

합니다 (Expect.Call에서 람다 식의 이유는, 내 실제 방법 2 인자가 있음)

내 질문 :

  • 는이 시나리오에서 테스트를위한 일반적인 접근 방식을? (RhinoMock과 mocking-frameworks로 시작했습니다.)
  • 왜 테스트가 통과합니까?

답변

3

야코프 (Jakob)의 의견에 의해 확인 된 바와 같이, PartialMock은 추상/가상 메소드를 모의하므로 사용자의 기대는 실제로 아무 것도하지 않습니다.

개인적으로 나는 일반적으로 테스트중인 클래스 내에서 메소드를 조롱하지 않습니다. 나는 단지 의존성을 조롱하고, 구체적인 클래스 대신 인터페이스를 통해 표현한다.

+0

: PartialMock만이 모의 가상 및 추상 메소드를

이 테스트는 당신이 단지에 방법 2의 서명을 할 것이다 실패 확인하십시오. –

+0

위대한 두 분 모두 고마워요. –

0

부분적으로 구체적인 클래스를 조롱하는 데 많은 가치가 있다고 생각합니다. 예를 들어, 클래스 내에서 호출되는 몇 가지 private 메소드가 있다고 가정 해보십시오. 테스트하기 전에 분명히 '내부'로 만들어야하지만, 새로운 클래스를 만들지 않고도이를 테스트 할 수있는 방법이 필요합니다. (많은 경우 올바른 솔루션이 아닙니다.) } {)

공공 가상 무효 방법 2 (올

관련 문제