Как проверить конструктор класса с методом @PostConstruct с помощью Spring?
Если у меня есть класс с методом @PostConstruct, как я могу проверить его конструктор и, следовательно, его метод @PostConstruct с использованием JUnit и Spring? Я не могу просто использовать новое ClassName (param, param), потому что тогда он не использует Spring - метод @PostConstruct не запускается.
Я пропустил что-то очевидное здесь?
public class Connection {
private String x1;
private String x2;
public Connection(String x1, String x2) {
this.x1 = x1;
this.x2 = x2;
}
@PostConstruct
public void init() {
x1 = "arf arf arf"
}
}
@Test
public void test() {
Connection c = new Connection("dog", "ruff");
assertEquals("arf arf arf", c.getX1();
}
У меня есть нечто похожее (хотя и немного сложнее), чем это, и метод @PostConstruct не попадает.
Ответы
Ответ 1
Посмотрите Spring JUnit Runner.
Вам нужно ввести свой класс в свой тестовый класс, чтобы spring построил ваш класс и также вызвал метод post construct. Обратитесь к домашнему клинику.
например:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:your-test-context-xml.xml")
public class SpringJunitTests {
@Autowired
private Connection c;
@Test
public void tests() {
assertEquals("arf arf arf", c.getX1();
}
// ...
Ответ 2
Если единственной управляемой частью контейнера Connection
является ваш метод @PostContruct
, просто вызовите его вручную в тестовом методе:
@Test
public void test() {
Connection c = new Connection("dog", "ruff");
c.init();
assertEquals("arf arf arf", c.getX1());
}
Если их больше, например, зависимостей и т.д., вы все равно можете либо ввести их вручную, либо, как сказал Шридхар, - использовать тестовую среду spring.
Ответ 3
@PostConstruct
должно быть изменено состояние объекта. Итак, в тестовом примере JUnit после получения bean проверьте состояние объекта. Если это то же самое, что и состояние, установленное на @PostConstruct
, тогда тест будет успешным.
Ответ 4
По умолчанию Spring не будет знать аннотации @PostConstruct и @PreDestroy. Чтобы включить его, вам нужно либо зарегистрировать "CommonAnnotationBeanPostProcessor", либо указать конфигурационный файл "
<bean class="org.springframework.context.annotation.CommonAnnotationBeanPostProcessor" />
или
<context:annotation-config />