构造函数中的异常:Rhino.Mocks.Exceptions.ExpectationViolationException:预期#0,实际#1

时间:2019-03-18 18:34:46

标签: c# unit-testing mocking rhino-mocks

我为此构造函数进行了Rhino Mock测试

three

这是测试

    public MyClassDataAccess(IMyClassLogger logger)
    {
        _logger = logger ?? throw new ArgumentNullException("logger");
    }

然后我将构造函数修改为此

    [TestMethod]
    public void Ctor_ValidParams_CreatesObject()
    {
        // Arrange
        IMyClassLogger logger = MockRepository.GenerateStrictMock<IMyClassLogger>();
        // Act
        var result = new MyClassDataAccess(logger);

        // Assert
        Assert.IsNotNull(result);
    }

现在我收到以下错误

  

消息:初始化方法MyClass.Tests.DataAccess.MyClassDataAccessTests.TestInit引发异常。 System.Exception:System.Exception:构造函数中的异常:Rhino.Mocks.Exceptions.ExpectationViolationException:IMyClassLogger.get_BaseLogger();预期#0,实际#1。

1 个答案:

答案 0 :(得分:1)

抛出异常是因为您在严格的模拟中调用了成员

IMyClassLogger logger = MockRepository.GenerateStrictMock<IMyClassLogger>(); //<-- Strict Mock here

未定义期望。

您正在调用

_database = new Database(_logger.BaseLogger);

在构造函数中,但没有期望被调用,因此您会在ExpectationViolationException上获得IMyClassLogger.get_BaseLogger(),如异常消息中所述

您需要为该成员设置期望

[TestMethod]
public void Ctor_ValidParams_CreatesObject()
{
    // Arrange
    ILogger baseLogger =  MockRepository.GenerateMock<ILogger>();
    IMyClassLogger logger = MockRepository.GenerateStrictMock<IMyClassLogger>();
    logger.Stub(_ => _.BaseLogger).Return(baseLogger);

    // Act
    var result = new MyClassDataAccess(logger);

    // Assert
    Assert.IsNotNull(result);
}