如何使用回调设置Moq?

时间:2016-08-03 20:24:33

标签: callback moq

好的,我已经开始关注Moq了,所以这是一个菜鸟问题 我已关注quick guide,我正在尝试设置回调以返回特定模型:

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:无法转换“System.String”类型的对象   输入'UserQuery + MyModel'。

我做错了什么?

1 个答案:

答案 0 :(得分:1)

T方法中的Callback<T>应与Setup方法的参数类型相匹配。换句话说,Moq允许您使用与被模拟的方法相同的参数设置回调方法。

我不确定你在这里要做什么。如果您只是想从模拟方法中保存返回MyModel对象,请执行以下操作:

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

如果您尝试使用给定的MyModel参数创建string,请执行以下操作:

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