Java 显式调用@PostConstruct带注释的方法
我正在为我的一个java类编写junit测试。我有一个@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");
@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肯定会从现在开始跟进。谢谢