2014-02-21 12 views
0

Moq 호출에서 약간 혼란 스럽습니다. 나는 Moq에게 객체를 취하는 함수가 필요하다. 기존 객체가 생성 한 내용을 입력 객체의 필드에서 가져 오는 다른 객체를 반환해야합니다.Moq 입력에 따라 달라지는 결과

그래서 입력에 복잡한 객체를 제공하고 해당 필드 중 하나는 숫자와 같으며 일부 숫자를 고려하여 생성 된 객체로 응답해야합니다.

나는 다음과 같은 스케치를 생각해 냈지만 오류가 많습니다. 적절한 입문서를 통해 내가 필요한 것을 어떻게 처리하는지 잘 알고 있습니다.

var processor = new Mock<IMyCommandProcessor>(); 
processor.Setup(d => d.ProcessCommand(It.IsAny<MyCommand>)) 
    .Returns((MyResponse r) => r.Results = new List{ newDto(aaa) }); 

newDto (AAA)는 함수 호출하고, 대신에 단 I의 입력으로부터 소정 MyCommand 객체 오는 필드가 필요하다. 내가 여기서 조롱하는 걸 어떻게 선언 할 수 있니? 고마워요!

+1

*? * '해당 필드 중 하나가 일부 숫자와 동일합니다.'* 어느 필드입니까? 어느 번호? 어떤 기능을 호출해야합니까? 또한 테스트 할 논리가 무엇인지 이해하는 것이 좋을 것입니다. 어쩌면 여기서 잘못된 접근법을 사용하고있을 수도 있습니다. –

답변

1

는 도우미 함수를 호출은 다음 시도 할 수 있습니다 :

* 필드 '입력 오브젝트의 필드에서의 입력을 받아'
processor.Setup(d => d.ProcessCommand(It.IsAny<MyCommand>)) 
     .Returns((MyCommand c) => new MyResponse(){ Results = new List<DtoType>(){ newDto(aaa)}}); 
+0

감사! 그냥 그 새로운 목록 올바른 구문이 될 것이라고 추가 할 것입니다 : 그것은 질문에 내 실수했다. –

+0

감사합니다. :) – MattC

1

당신은 반환 콜백에서 입력 매개 변수를 사용해야합니다

processor.Setup(d => d.ProcessCommand(It.IsAny<MyCommand>)) 
     .Returns((MyCommand c) => new MyResponse()}); 

이 테스트중인 클래스에 정의되어있는 경우에는 newDto 기능에 액세스 할 수 없습니다 그러나.

+0

어쩌면 제가 누락되었지만 전달 된 명령을 사용하지 않고 있습니다. –

+0

@SergeyBerezovskiy 예, OP가 원하는 것이 확실하지 않습니다. 여기에서 할. 방금 추가 했으므로 올바른 매개 변수 유형을 볼 수 있습니다. –

2

일반적인 예 : input + input은 물론 모든 방법으로 대체 할 수 있습니다. newDto(aaa) 만약

[Test] 
    public void TestMock() 
    { 
     var a = new Mock<IDictionary<string, string>>(); 
     a.Setup(d => d[It.IsAny<string>()]).Returns((string input) => input + input); 
     string result = a.Object["test"]; 
    } 
관련 문제