2016-03-15 4 views
1

Я пишу тесты junit для одного из моих классов java. У меня есть @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 и весне и все еще на стадии борьбы. – eureka19

+0

Вы должны включить трассировку стека ошибок и объяснить, что вы подразумеваете прямо в своем вопросе. – kryger

ответ

2

Случай 1:

Если компонент для класса Java создается в XML и контекста конфигурации загружается, то метод компонента жизненного цикла будет вызываться автоматически.

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

Случай 2:

методы Bean жизненного цикла @PostConstruct и @PreDestroy следует назвать явно в блок тестов для проверки.

Если объект тестового класса создается, как показано ниже

JavaClass javaClass = new JavaClass(); 

тогда да, как боб не создается, то нужно вызвать метод initialize explicilty.

обоих случаях позволит вам проверить требуемую область,

Дразнящий cryptographicController должны дать вам необходимые параметры

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

Спасибо. Это помогло – eureka19

Смежные вопросы