好的,我已经开始关注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'。
我做错了什么?
答案 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 });