我想验证一个方法只被调用一次。
mock.Verify(x => x.Method("String", out It.IsAny<StringBuilder>()), Times.Once);
我不关心第二个参数,它可以是任何东西。
由于
out
参数,我收到以下错误消息:
'out' 参数必须是可分配的变量、字段或数组元素
尝试按照错误消息说明进行操作,并将 out 参数放入变量中。
var builder = new StringBuilder();
mock.Verify(x => x.Method("String", out builder), Times.Once);
这里是一个完整的例子,在测试时通过。
[TestClass]
public class ExampleTest {
public interface IInterface {
void Method(string p, out StringBuilder builder);
}
public class MyClass {
private IInterface p;
public MyClass(IInterface p) {
this.p = p;
}
public void Act() {
var builder = new StringBuilder();
p.Method("String", out builder);
}
}
[TestMethod]
public void Should_Ignore_Out() {
//Arrange
var mock = new Mock<IInterface>();
var sut = new MyClass(mock.Object);
//Act
sut.Act();
//Assert
var builder = new StringBuilder();
mock.Verify(x => x.Method("String", out builder), Times.Once);
}
}
您可以使用
It.Ref<StringBuilder>.IsAny
验证 Any。在您的情况下,解决方案如下:
mock.Verify(x => x.Method("String", out It.Ref<StringBuilder>.IsAny), Times.Once);
这个功能是在Moq 4.8.0-rc1中添加的