【发布时间】:2014-06-21 01:24:41
【问题描述】:
前言:我的默认操作模式是使用 IoC 容器和构造函数注入。这使得使用模拟依赖项进行测试变得微不足道。
我开始开发一个 IntelliJ 插件,我想利用控制反转。由于这是一个插件,因此实际上没有容器选项(对吗?)所以我想我需要使用服务定位器模式。
如何使用带有 Service Locator 模式的 mock 进行测试?
我能想到的最好的方法是为我的定位器使用一个接口,使用静态 getter 在每个服务的默认构造函数中设置它,并拥有一个 setter,以便我可以设置一个模拟定位器。它看起来像这样:
public class MyService {
private IServiceLocator locator;
public MyService() {
setLocator(ServiceLocator.locator());
}
public void setLocator(IServiceLocator locator) {
this.locator = locator;
}
}
现在我可以模拟 IServiceLocator 并在我的测试中将其设置为 MyService。然后我可以期待像locator.dependency1() 这样的调用并让它返回一个模拟的依赖项。
我对这种方法的主要问题是定位器设置器仅用于支持测试。 有更好的方法吗?
【问题讨论】:
标签: java unit-testing intellij-idea intellij-plugin service-locator