如何使用 It.IsAny<> 和 Moq 模拟输出参数?

fot*_*666 8 unit-testing moq out

我想验证一个方法只被调用一次。

mock.Verify(x => x.Method("String", out It.IsAny<StringBuilder>()), Times.Once);
Run Code Online (Sandbox Code Playgroud)

我不关心第二个参数,它可以是任何东西。

由于该参数,我收到以下错误消息out

“out”参数必须是可分配的变量、字段或数组元素

Nko*_*osi 1

尝试按照错误消息说明将out参数放入变量中。

var builder = new StringBuilder();
mock.Verify(x => x.Method("String", out builder), Times.Once);
Run Code Online (Sandbox Code Playgroud)

这是测试通过的完整示例。

[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);
    }
}
Run Code Online (Sandbox Code Playgroud)