显式调用@PostConstruct注释方法

时间:2016-03-15 09:10:58

标签: java unit-testing junit

我正在为我的一个java类编写junit测试。我有一个 @PostConstruct 带注释的方法,如下所示,我想编写单元测试:

@PostConstruct
public void initialize() {
    try {
        logger.info("Bootstrapping Safenet Initialization");
        String hello = cryptographicController.encrypt("Hello");
        logger.info("Bootstrapping Safenet " + hello);
    } catch (Throwable ex) {
        logger.error("Error initializing Crypto", ex);
        throw new DataConverterException();
    }
}

我想编写单元测试来测试 DataConverterException 。但我不确定我是否可以从单元测试中明确调用 initialize 方法。

我该怎么做?

1 个答案:

答案 0 :(得分:2)

案例1:

如果在xml中创建了java类的bean并且加载了上下文配置,那么将自动调用bean生命周期方法。

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "XX")

案例2:

应在单元测试用例中明确调用Bean生命周期方法@PostConstruct@PreDestroy进行测试。

如果测试类的对象如下所示

JavaClass javaClass = new JavaClass();

然后是的,因为没有创建bean,所以我们需要将initialize方法称为explicilty。

这两种情况都可以让你测试所需的区域,

模拟cryptographicController应该为您提供所需的选项

@Test(expected=DataConverterException.class)
public void test() {
    doThrow(new RuntimeException()).when(cryptographicController).encrypt("Hello");
    javaClass.initialize();
}