我正在尝试对一个使用某个接口依赖的函数进行单元测试,我想使用moq来模拟这个接口。该接口有一个这样的函数。
int Command(CommandType commandType, string commandText, params IDbDataParameter[] parameters);
实现该接口的 "普通 "类将使用IDbDataParameter参数并设置一些值。然后在调用接口上的命令函数的函数中使用这些值。有谁知道我如何设置mock对象,以便当命令函数在mock对象上被调用时,它将在收到的IDbDataParameter上设置值作为输入?
所以,我想测试的函数和命令函数的调用是这样的。
var pInput = DbDataParameter();
var pOutput = DbDataParameter();
Dependency.Command(Type, Name, pInput, pOutput);
if (pOutput.Value != null)
{
Do Something
}
我试过使用下面这样的回调函数,但是没有用。 数组变量是一个数组,在这个数组中,值被设置为测试函数所需要的值。
Mock.Setup(o => o.Command(It.IsAny<CommandType>(), It.IsAny<string>(), It.IsAny<IDbDataParameter[]>())).
Callback<CommandType, string, IDbDataParameter[]>((c, s, p) => p = array);
好吧,我找到了自己问题的答案。问题是,你不能直接给数组赋值,因此 (p = array)
不起作用。但是可以给数组中的值赋值。所以 (p[1] = array[1])
确实有效。所以,比如说:
Mock.Setup(o => o.Command(It.IsAny<CommandType>(), It.IsAny<string>(), It.IsAny<IDbDataParameter[]>())).
Callback<CommandType, string, IDbDataParameter[]>((c, s, p) =>
{
for (var i = 0; i < p.Length; i++)
{
p[i] = array[i]);
}
});