如何使用回调设置最小起订量?

How to setup Moq with Callbacks?

好的,我已经开始看起订量了,所以这是一个菜鸟问题。
我已遵循 quick guide,我正在尝试设置回调到 return 特定模型:

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: Object of type 'System.String' cannot be converted to type 'UserQuery+MyModel'.

我做错了什么?

Callback<T> 方法中的 T 应该匹配方法的参数类型 Setup。换句话说,Moq 让您设置一个回调方法,其参数与被模拟的方法相同。

我不太确定你想在这里做什么。如果您只是想从模拟方法中保存 return 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 });