设置moq并验证方法是否被调用

dev*_*per 16 .net c# tdd moq

使用Microsoft Test Framework和Moq我正在尝试验证是否调用了log4net方法.

    [TestMethod()]
    public void Log_Info_When_Stuff_Is_Done()
    {
        SampleClass sampleObject = new SampleClass(); 

        Mock<log4net.ILog> logMockObject = new Mock<log4net.ILog>();

        sampleObject.Log = logMockObject.Object;

        sampleObject.DoStuffAndLogInfo();

        logMockObject.Verify(moqLog => moqLog.Info("do stuff got called"), Times.AtLeastOnce());

    }
Run Code Online (Sandbox Code Playgroud)

我在Verify调用中得到一个例外

模拟上的预期调用至少一次,但从未执行过:moqLog => moqLog.Info("do stuff got called")未配置任何设置.没有进行任何调用.

我究竟做错了什么?

更新问题是使用SampleClas.Log属性的getter.LogManager.GetLogger(...);即使属性已经设置为ILogProxy,我也总是返回.我的印象是,我不会调用属性的get访问器,因为我已经设置了这样的代理 sampleObject.Log = logMockObject.Object;

Mic*_*Liu 34

现在起订量验证DoStuffAndLogInfo调用Info实际字符串 "做的东西得到了被称为".如果它实际上Info使用不同的参数调用,并且您不关心实际参数是什么,请使用以下代码:

logMockObject.Verify(moqLog => moqLog.Info(It.IsAny<string>()), Times.AtLeastOnce()); 
Run Code Online (Sandbox Code Playgroud)


Cri*_*scu 1

测试设置正确。

检查你的su看看是否Log.Info真的在方法内部被调用DoStuffAndLogInfo