1

我有一个记录器服务,它具有一个ScopeStorage和一个LoggerServiceDAO依赖项,在我的单元测试中,我需要覆盖这些以使用我创建的模拟对象。我正在使用 Wirebox AOP 来触发日志事件,所以我不能只创建一个模拟对象并将其传递给CustomerContact对象的构造函数

这是我正在创建的模拟:

scopeStorageMock = mockBox.createMock('system.ScopeStorage').$('get', 111);
loggerServiceDAOMock = mockBox.createMock('system.services.daos.loggerServiceDAO').$('insertLog');

在我的 Wirebox 活页夹中,我有以下映射:

map('CustomerContact').to('models.Customer.CustomerContactBean');
map('LoggerServiceDAO').to('system.Services.DAOs.LoggerServiceDAO');
map('ScopeStorage').to('system.ScopeStorage');
map('CustomerContactLogger').to('models.customer.loggers.CustomerContactLogger');
mapAspect("CustomerAspect").to('models.CustomerAspect');
bindAspect(classes=match().mappings("CustomerContact"), methods=match().methods(['create','delete', 'update']), aspects="CustomerContactLogger");

在我的单元测试中是否有办法告诉 Wirebox,当它获取CustomerAspect对象的一个​​实例以使用我用 Mockbox 创建的两个模拟对象时?

4

1 回答 1

0

我找到了解决方案,虽然它看起来有点老套,但它确实有效。基本上我所做的就是告诉 Wirebox 取消映射现有的CustomerContactLogger,然后创建一个CustomerContactLoggerMock并注入所有 Mocked 属性。之后,我创建了一个新的映射CustomerContactLogger并将值设置为等于模拟对象。

injector.getBinder().unMap('customercontactLogger');
customerContactLoggerMock = mockBox.createMock('models.customer.loggers.CustomerContactLogger');
customerContactLoggerMock.$property(propertyName='scopeStorage', mock=scopeStorageMock).$property(propertyName='loggerServiceDAO', mock=loggerServiceDAOMock);injector.getBinder().map('CustomerContactLogger').toValue(customerContactLoggerMock);
injector.getBinder().map('CustomerContactLogger').toValue(customerContactLoggerMock);
于 2017-11-16T01:01:21.850 回答