已关闭,此问题为opinion-based。它目前不接受回答。
**想改善这个问题吗?**更新问题,以便editing this post可以用事实和引用来回答。
2天前关闭。
Improve this question
我想重构一个应用程序,其中一些字段使用静态工厂方法初始化。这使得单元测试变得困难,这些字段只能通过单元测试中的反射来设置。下面是一个我想重构的代码示例
@Service
@RequiredArgsConstructor
public class MyService {
private final RemoteService remoteService = RemoteServiceFactory.newInstance();
private final MySecondService secondService;
....
}
正如你所看到的,有一个通过工厂初始化的字段。无法进行自动装配,因为未找到此类型的bean。RemoteService是来自maven依赖项的遗留代码。
我正在寻找一些依赖注入的解决方案,因为如果没有反射,你就不能真正正确地测试我的服务。
在服务类中避免这种初始化的最佳实践是什么?
3条答案
按热度按时间ggazkfy81#
只需像往常一样进行依赖注入,并将
RemoteServiceFactory.newInstance()
移动到@Bean
注解的方法中。问题解决了**注意:**我删除了Lombok岛的使用,由于个人喜好不使用它,你当然可以使用
@RequiredArgsConstructor
,如果你喜欢。biswetbf2#
第一步:将RemoteService定义为Bean,这样您就可以创建一个Java Config类(用@Configuration注解)来将RemoteService定义为Spring bean。
第二步:通过构造函数注入RemoteService
第三步:单元测试,你可以使用Mockito这样的mocking框架来模拟RemoteService和MySecondService。
}
euoag5mw3#
谢谢你以前的回答。
最后我得到了一个配置,它从第三方库生成RemoteService的bean定义。
我不能自动接线。