2012-06-22 2 views
1

NMock2 및 Moq 프레임 워크를 처음 사용합니다.NMock2에서 UT를 Moq로 변환하십시오. 또한, NMock2의 .Will()은 무엇을 의미합니까?

var myMock= myMockery.NewMock<IMyInterface>(); 
var myRoleMock = myMockery.NewMock<IRoleInterface>(); 
var acceptAction = new MyAcceptAction(myRoleMock); 
Stub.On(myMock).Method("Accept").Will(acceptAction); 

나는 또한 의미 위의 코드에서 어떤 Will() 명확하지 않다 : 나는 MOQ 코드에 내 현재 프로젝트에서 NMock2 코드를 변환 도움이 필요합니다. NMock2의 Will(Return.Value(something))은 Moq의 Returns(something)과 동일하다는 아이디어가 있습니다.

Will(something)Will(Return.Value(something))은 동일합니까?

답변

1

차이점을 알아 보려면 조금 조사해야합니다. 의 후드 아래를 살펴 보자, Will 방법의 서명은 약자

public void Will(params IAction[] actions) 

는 이제 IAction 인터페이스는 IInvokable 하나 particulary 중요한 인터페이스에서 파생됩니다. 이름에서 알 수 있듯이 구현자를 호출 할 수 있습니다 ( Invoke 메소드를 통해). Return.Value과 어떤 관련이 있습니까?

public class Return 
{ 
    public static IAction Value(object result) 
    { 
     return new ReturnAction(result); 
    } 
} 

조금 더 깊은 우리는 Invoke 방법 ReturnAction 단순히 모의 예상/사용할 수 반환 값을 설정하는 것을 찾을 수 있습니다 파고. 그러나 요점은 아닙니다. Return.ValueWill이 요구하는 IAction을 만드는 간단한 래퍼입니다.

MyAcceptAction도이 인터페이스를 구현해야합니다. 정확히

Stub.On(myMock).Method("Accept").Will(acceptAction); 

라인에서 일어나는 무엇인지 알고, 당신은 어떻게 구현되는지 MyAcceptAction 확인해야합니다. 특히, Invoke 방법.

+0

많은 지미가 있습니다. :) 단지 작은 의심 ... IAction 또는 IInvokable 인터페이스 (이 경우 MyAcceptAction 클래스)의 구현에서 invoke 메소드의 사용법은 윌 (뭔가) 방법? tat 인 경우이 인터페이스를 사용하거나 Moock이 아닌 NMock2에 대해서만 메소드를 호출 할 수 있습니까? .. –

+0

@NiranjanK : "Will"또는 NMock 자체를 사용하십시오. 'IInovakable'은 NMock API이므로 Invoke 메소드에서 어떤 일이 일어나고 있더라도 Moq 코드로 * 번역해야합니다. –

+0

고맙습니다. :) Moq의 콜백 (Callback) 도움으로 해결할 수있었습니다. –