给出以下界面
public interface ISomething {
void DoMany(string[] strs);
void DoManyRef(ref string[] strs);
}
我想验证是否调用了DoManyRef方法,并将任何字符串数组作为strs
参数传递。以下测试失败:
public void CanVerifyMethodsWithArrayRefParameter() {
var a = new Mock<ISomething>().Object;
var strs = new string[0];
a.DoManyRef(ref strs);
var other = It.IsAny<string[]>();
Mock.Get(a).Verify(t => t.DoManyRef(ref other));
}
虽然以下不需要通过引用传递的数组:
public void CanVerifyMethodsWithArrayParameter() {
var a = new Mock<ISomething>().Object;
a.DoMany(new[] { "a", "b" });
Mock.Get(a).Verify(t => t.DoMany(It.IsAny<string[]>()));
}
我无法更改界面以消除参考要求。
答案 0 :(得分:1)
要验证ref参数,您需要将实际实例传递给verify调用。这意味着您的第一次测试应如下所示:
[Test]
public void CanVerifyMethodsWithArrayRefParameter()
{
var a = new Mock<ISomething>().Object;
var strs = new string[0];
a.DoManyRef(ref strs);
Mock.Get(a).Verify(t => t.DoManyRef(ref strs));
}
问题的最后一句使我相信您可能无法进行更改,但这是验证调用成功所需的内容。希望这会有所帮助。