Java 显式调用@PostConstruct带注释的方法

Java 显式调用@PostConstruct带注释的方法,java,unit-testing,junit,Java,Unit Testing,Junit,我正在为我的一个java类编写junit测试。我有一个@PostConstruct注释的方法,如下所示,我想为其编写单元测试: @PostConstruct public void initialize() { try { logger.info("Bootstrapping Safenet Initialization"); String hello = cryptographicController.encrypt("Hello");

我正在为我的一个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:

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

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "XX")
案例2:

Bean生命周期方法
@PostConstruct
@PreDestroy
应该在要测试的单元测试用例中显式调用

如果测试类的对象创建如下

JavaClass javaClass = new JavaClass();
然后是的,因为bean没有被创建,所以我们需要显式地调用
initialize
方法

这两种情况都允许您测试所需的区域

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

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

你说“但我不确定我是否能明确地呼叫(…)”是什么意思-你为什么不试试呢?@kryger在发帖之前我试过了。出现了一些错误,所以我不确定是因为显式调用postConstruct还是其他原因。我对java和spring非常陌生,仍处于挣扎阶段。您应该在问题中包含错误堆栈跟踪,并直接解释您的意思。@kryger肯定会从现在开始跟进。谢谢