构造函数中的异常:Rhino.Mocks.Exceptions.ExpectationViolationException:期望#0,实际#1
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了构造函数中的异常:Rhino.Mocks.Exceptions.ExpectationViolationException:期望#0,实际#1相关的知识,希望对你有一定的参考价值。
我为这个构造函数做了一个有效的Rhino Mock测试
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);
然后我修改了构造函数
public MyClassDataAccess(IMyClassLogger logger)
_logger = logger ?? throw new ArgumentNullException("logger");
_database = new Database(_logger.BaseLogger);
public Database(ILogger logger)
_logger = logger ?? throw new ArgumentException(nameof(logger));
_databaseNameConnectionString = ConfigurationManager.ConnectionStrings["DatabaseName"].ConnectionString;
现在我收到以下错误
消息:初始化方法MyClass.Tests.DataAccess.MyClassDataAccessTests.TestInit引发异常。 System.Exception:System.Exception:构造函数中的异常:Rhino.Mocks.Exceptions.ExpectationViolationException:IMyClassLogger.get_BaseLogger();预期#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);
以上是关于构造函数中的异常:Rhino.Mocks.Exceptions.ExpectationViolationException:期望#0,实际#1的主要内容,如果未能解决你的问题,请参考以下文章
使用构造函数注入的弹簧@RestController中的空异常@Service
构造函数中的异常:Rhino.Mocks.Exceptions.ExpectationViolationException:期望#0,实际#1
线程“主”javax.persistence.PersistenceException 中的异常:org.hibernate.InstantiationException:实体没有默认构造函数:[重复
构造函数中的变量初始化速度不够快,无法防止 html 代码中的空指针异常 [Angular]