Unit testing 如何单元测试具有字段注入的类(使用guice)
测试中的类如下所示:Unit testing 如何单元测试具有字段注入的类(使用guice),unit-testing,dependency-injection,junit4,guice,Unit Testing,Dependency Injection,Junit4,Guice,测试中的类如下所示: public class SomeAdapter { @Inject HttpService httpService; @Inject Configuration configuration; public SomeAdapter() { GuiceInjector.getInjector().injectMembers(this); } public String getBaseUrl() { return configuration.getPro
public class SomeAdapter {
@Inject
HttpService httpService;
@Inject
Configuration configuration;
public SomeAdapter()
{
GuiceInjector.getInjector().injectMembers(this);
}
public String getBaseUrl()
{
return configuration.getProtocol()+ "://" + some.getServer() + ":" + configuration.getPort();
}
}
我尝试过从mockito框架中注入Mock,但它似乎不可靠。是否有必要创建一个扩展AbstractModule的独立测试模块?我建议在类之外注入依赖项(这将遵循单一责任原则)。然后您可以使用标准Mockito:
@RunWith(MockitoJUnitRunner.class)
public class SomeAdaptorTest {
@Inject
Configuration configuration;
@InjectMocks
SomeAdaptor adaptor = new SomeAdaptor();
@Before
public void setUp() {
when(configuration.getId()).thenReturn(5);
}
...
或者创建另一个构造函数package private来接受模拟依赖项。被测试的类误用了Guice API(它不应该出现在生产类中的任何地方)。如果构造函数中的代码被删除,那么该类应该可以使用任何支持注入模拟依赖项的模拟库(如EasyMock、Mockito或JMockit)进行测试。@Rogério,那么您的意思是,“GuiceInjector.getInjector().injectMembers(this)”不能出现在构造函数中吗?是的,因为依赖项注入的整个要点是将负责实例化类依赖项的代码/配置移动到某个单独的外部实体(DI框架/容器,以及DI配置文件或类,在Guice的例子中是“模块”)。生产类本身最多应该包含元数据注释,例如
@Inject
。