首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Mockbox和Wirebox覆盖默认依赖关系

如何使用Mockbox和Wirebox覆盖默认依赖关系
EN

Stack Overflow用户
提问于 2017-11-16 07:35:48
回答 1查看 95关注 0票数 1

我有一个具有ScopeStorageLoggerServiceDAO依赖项的记录器服务,在我的单元测试中,我需要覆盖它们才能使用我创建的模拟对象。我使用Wirebox AOP来触发日志记录事件,因此我不能只创建一个模拟对象并将其传递到CustomerContact对象的构造函数中

下面是我正在创建的mock:

代码语言:javascript
复制
scopeStorageMock = mockBox.createMock('system.ScopeStorage').$('get', 111);
loggerServiceDAOMock = mockBox.createMock('system.services.daos.loggerServiceDAO').$('insertLog');

在我的Wirebox绑定器中,我有以下映射:

代码语言:javascript
复制
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创建的两个模拟对象?

EN

回答 1

Stack Overflow用户

发布于 2017-11-16 09:01:22

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

代码语言:javascript
复制
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);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47319140

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档