2010-05-05 2 views
0

두 가지 방법이있는 클래스가 있습니다. 하나의 메소드는 다른 메소드를 호출해야하며, 테스트에서는 호출 된 것으로 주장하고 싶습니다.RhinoMock에서 다른 메소드 내에서 메소드가 호출 된 경우 어떻게 어설 션 하시겠습니까?

public class Tasks : ITasks 
{ 
    public void MethodOne() 
    { 
    MethodTwo(1); 
    } 

    public int MethodTwo(int i) 
    { 
    return i + 1; 
    } 
} 

나는 작업을 조롱하고 tasks.AssertWasCalled(x => x.MethodTwo(1))처럼 뭔가를 할 수 있습니다. MethodTwo 가상해야합니까?

답변

0

물론 내 생각에는 결함이있었습니다. 구현이 아닌 ITasks를 조롱해야합니다 (작업) :

ITasks tasks = MockRepository.GenerateMock<ITasks>(); 
tasks.AssertWasCalled(x => x.MethodTwo(Arg<int>.Is.Equal(1))); 
1

찾고있는 개념은 partial mocks입니다 (이전 구문을 보여 주지만 새로운 머리글이 기억 나지 않습니다). 당신은 그것에 대해 읽어야합니다. 본질적으로 Tasks (ITasks 아님)에서 모의 ​​객체를 만들고 MethodTwo (가상 일 필요가 있음) 만 조롱하도록 지시합니다.

그러나 ... 디자인을 재고하고 싶을 수 있습니다. ITasks 란 무엇입니까? 역할은 무엇입니까? 서로 다른 실제 작업이 있습니까? 같은 반에 그들을 원할 이유가 있습니까? 제 이해는 레거시 구성 요소를 테스트해야하는 경우에만 부분 모의 객체가 포함된다는 것입니다. 사용법을 찾지 못했습니다.

+0

이것은 질문을 단순화하기위한 예제 클래스입니다. :) 실제 코드에는 SharpArchitecture에서 제공하는 작업 (응용 프로그램 서비스) 클래스가 있습니다. 어쨌든, 나는 이미 나쁜 디자인을보기 시작했다. 예를 들어 MethodTwo()가 MethodOne()에 의해서만 사용되는 예제를 따라하면, 그 클래스에서 상속하지 않는다면 그 메소드는 가상이 아니어야한다. 생각, 나는 다른 클래스에 의해 사용될 것이라고 생각한다. 그래서 아마 지금은 private이되어야하고 private 메소드는 조롱받지 않았고 테스트를 거치지 않았다. 부분적인 mocks에 대한 링크를 가져 주셔서 감사합니다. :) –