2016-08-03 2 views
0

좋아, 나는 Moq를보기 시작했다. 그래서 이것은 멍청한 질문이다.
내가 quick guide 따르고, 내가 특정 모델을 반환하는 설정에 콜백을 시도하고있다 : 나는 호출에이 예외가콜백으로 Moq를 설정하는 방법은 무엇입니까?

void Main() 
{ 
    var resultData = new MyModel(); 
    var mock = new Mock<IMyClass>(); 

    mock.Setup(x => x.Register(It.IsAny<string>())) 
     .Returns(new MyModel { Name = "Test" }) 
     .Callback<MyModel>((data) => 
     { 
      resultData = data; 
     }); 

    var parameter = "123"; 
    var result = mock.Object.Register(parameter); 
} 

public interface IMyClass 
{ 
    MyModel Register(string code); 
} 

public class MyModel 
{ 
    public string Name { get; set; } 
} 

을 :

경우 ArgumentException : 유형의 객체 '시스템 .String '을 으로 변환하여'UserQuery + MyModel '을 입력 할 수 없습니다. 내가 잘못 뭐하는 거지

?

답변

1

Callback<T> 메서드의 T은 메서드의 매개 변수 유형이 Setup과 일치해야합니다. 즉, Moq는 조롱 된 메소드와 동일한 매개 변수를 사용하여 콜백 메소드를 설정하도록합니다.

나는 당신이 여기서 무엇을하려고하는지 정확히 모르겠습니다. 당신이 당신 조롱 방법에서 반환 MyModel 개체를 저장하려는 경우, 다음을 수행

var returnedModel = new MyModel { Name = "Test" }; 
mock.Setup(x => x.Register(It.IsAny<string>())) 
    .Returns(returnedModel); 

당신이 주어진 string 매개 변수를 사용하여 MyModel을 만들려고하는 경우, 다음을 수행

mock.Setup(x => x.Register(It.IsAny<string>())) 
    .Returns((string data) => new MyModel { Name = data }); 
관련 문제