【发布时间】:2019-06-21 03:20:45
【问题描述】:
我有一个类的代码类似于:
public class class1{
private static final ConfigurationService config = Util.getInstance(ConfigurationService.class);
private SendQueueMessages sender;
public void start() throws LifecycleException{
LOGGER.info("Starting");
final ActiveMq activemq = config.getConfiguration().getActiveMq();
sender = new SendQueueMessages(activemq.getQueueName());
}
}
在程序的其他地方,Guice 被用来绑定配置服务和 Util,如下所示:
Util.register(new ThingICantChange(){
@Override
protected void configure (){
super.configure();
bind(ConfigurationService.class).to(ConfigurationServiceImpl.class).asEagerSingleton();
}
});
这可以进行单元测试吗?我最初尝试使用 JUnit 5 和 mockito,但很明显我需要模拟静态类/方法 (IoCUtils) 并为 PowerMock 切换到 JUnit4。
我试过了:
@RunWith(PowerMockRunner.class)
@PrepareForTest(Util.class)
public class Class1Test{
@Test
public void canStart(){
mockStatic(Util.class);
when(Util.getInstance(ConfigurationService.class)).thenReturn(new ConfigurationService);
Class1 class = new Class1();
class.start();
//etc.
}
}
但是,这只是给我一个关于 Util 未准备好进行测试的错误。将 mockStatic() 更改为 PowerMockito.spy() 确实让我知道何时,但随后会引发空指针错误。
【问题讨论】:
标签: java unit-testing mockito powermockito