2016-03-15 79 views
1

我正在爲我的java類之一編寫junit測試。我有如下所示爲此,我想要寫的單元測試@PostConstruct註解的方法:顯式調用@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。但我不確定是否可以從我的單元測試中明確地調用初始化方法。

我該怎麼做?

+0

你說的*「的意思,但我不知道如果我能顯式調用(...)「* - 爲什麼你不試試? – kryger

+0

@kryger我在發佈問題前試過了。出現了一些錯誤,所以我不確定錯誤是因爲明確地調用了postConstruct還是其他的東西。我對Java和Spring非常陌生,仍處於掙扎階段。 – eureka19

+0

您應該包含錯誤堆棧跟蹤並解釋您的問題中的含義。 – kryger

回答

2

情況1:

如果用於Java類的豆在xml和上下文配置創建被加載,則豆生命週期方法將被自動調用。

@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(); 
} 
+1

謝謝。這有幫助 – eureka19

相關問題