我在一个类中有以下方法
@Bean(name = "boggle")
public BoggleImpl createBoggleClient() {
BoggleBuilder builder = new BoggleBuilder()
.setRegistryId(getRegistryId())
.setRegistryPassword(getPassword())
return new BoggleFeatureImpl(builder.build());
}
我在一个类中使用bean,比如
class A {
private final Boggle boggle;
@PreDestroy
public void destroy() {
if (boggle != null) {
boggle.closeConnection();
}
}
}
现在我在单元测试中的代码覆盖率显示这些方法没有覆盖。不知道我能做些什么来涵盖这些方法。任何指针都在同一条线上。
2条答案
按热度按时间n3h0vuf21#
使用
SpringJUnit4ClassRunner
这个ApplicationContext
在所有运行的测试用例和@PreDestroy
仅当ApplicationContext
已关闭。spring有这样的行为是因为您可以在一个启动速度很慢的大型应用程序中工作,并且创建一个新上下文的成本很高。
您可以用
@DirtiesContext
注解。来自javadoc:
测试注解,指示与测试关联的applicationcontext是脏的,因此应关闭并从上下文缓存中删除。
如果测试修改了上下文(例如,通过修改单例bean的状态、修改嵌入式数据库的状态等),请使用此注解。请求相同上下文的后续测试将提供一个新上下文。
ddrv8njm2#
在这个例子中,
class A
一定是 Spring Bean 。带注解的方法@PreDestroy
应用程序上下文在关闭时调用。通常,当应用程序正常关闭时会发生这种情况。因此,基本上你可以“模拟”关闭应用程序上下文的情况,即使是从一个简单的单元测试,你不必为此在测试中启动spring。
将此方法视为具有某些代码的常规方法,而不管它是否由spring调用:
然后测试可以如下所示: