#java #spring #spring-boot #integration-testing #spring-test
Вопрос:
У нас есть некоторые интеграционные тесты (написанные с использованием spring framework), которые терпят неудачу из-за исключения инициализации компонента, что в конечном итоге приводит к Failed to load ApplicationContext
. Согласно моему пониманию из документов spring testing, загрузка ApplicationContext
происходит на уровне класса, поэтому я сомневаюсь —
- После
ApplicationContext
сбоя (т. Е.Failed to load ApplicationContext
) Из-за исключения инициализации компонента во время запуска интеграционного тестового класса, выполняется лиApplicationContext
повторная попытка запуска (в конечном итоге будет сбой) для каждого отдельного интеграционного теста, присутствующего в этом конкретном классе интеграционных тестов?- Задавая приведенный выше сценарий, поскольку мы наблюдаем огромный всплеск числа подключений к postgres при возникновении сбоя компонента, похоже, что для каждого присутствующего интеграционного теста (который в конечном итоге завершается неудачей
Failed to load ApplicationContext
) в классе интеграционных тестов spring пытается создать новое соединение с postgres и не уничтожает его передApplicationContext
сбоем. Как мы можем остановить это, пожалуйста, помогите с некоторыми предложениями.
- Задавая приведенный выше сценарий, поскольку мы наблюдаем огромный всплеск числа подключений к postgres при возникновении сбоя компонента, похоже, что для каждого присутствующего интеграционного теста (который в конечном итоге завершается неудачей
- Кроме того, как только мы получим
Failed to load ApplicationContext
, есть ли способ программно завершить выполнение всех интеграционных тестов полностью автоматически? Если да, пожалуйста, помогите, как этого добиться? Спасибо.
Платформа тестирования — junit Spring
Обновление: используется упомянутая платформа тестирования.
Ответ №1:
В настоящее время нет способа прервать интеграционные тесты, если ApplicationContext
повторно не удается загрузить.
Чтобы проголосовать за такую поддержку, пожалуйста, ознакомьтесь с этим выпуском Spring Framework .
Ответ №2:
- Если у вас есть несколько интеграционных тестов в тестовом классе, то он будет терпеть неудачу несколько раз.
- вы можете завершить все интеграционные тесты, используя свойство dependsOnGroups .
Например, у вас может быть метод для проверки наличия сбоя исключения компонента или нет, и объявить все остальные тесты зависимыми от этого метода. Но это можно сделать с помощью TestNG
@Test(groups = { "isApplicationContextFailed" }) // you can run with simply @Test here if there is only one independent test.
public void isApplicationContextFailed() {}
@Test(dependsOnMethods = { "isApplicationContextFailed" })
public void queryTestOne() {}
@Test(dependsOnMethods = { "isApplicationContextFailed" })
public void queryTestTwo() {}
вы можете узнать больше из TestNG -> https://testng.org/doc/documentation-main.html#dependent-methods
Примечание: — если вы используете JUnit, есть несколько других способов сделать то же самое. Пожалуйста, обновите в этом случае.
Комментарии:
1. Привет, Нарасимха, я обновил вопрос, упомянул junit spring в качестве платформы тестирования. Пожалуйста, предложите. Спасибо.
2. Затем вы можете просто использовать аннотацию @BeforeClass в зависимом методе, который сначала проверяет сбой контекста приложения.
Ответ №3:
Если вы используете JUnit, добавьте ниже login в свои тестовые классы, он будет работать.
public class BaseClass {
@BeforeClass
public void isApplicationContextFailed() {
//logic to check for application failure
}
//continue with your test methods.
}
Чтобы предложить вам ознакомиться с приведенными ниже ссылками, чтобы получить подробную информацию.
https://junit.org/junit4/javadoc/4.13/org/junit/BeforeClass.html
https://howtodoinjava.com/testng/testng-before-and-after-annotations/