我为此构造函数进行了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。
答案 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);
}