Подтвердить что ты не робот

Как проверить конструктор класса с методом @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 не попадает.

4b9b3361

Ответ 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 />