Как протестировать приложение Spring Boot 1.2.7?

Мне нужно протестировать старое Java-приложение Spring Boot (версия Весенняя загрузка 1.2.7, Ява 1.8) и я не хочу менять версию Spring (т.к. приложение очень объемное и тогда придется сильно рефакторить код).

Я хотел бы применить к вводу моего настольного приложения разные типы столбцов таблицы и проверить, правильно ли приложение определяет их.

Но проблема в том, что из-за старой версии Spring я не могу получить аннотации, такие как @ExtendWith(SpringExtension.class), @ExtendWith(MockitoExtension.class) или @RunWith(SpringRunner.class), чтобы включить функции весенней загрузки, или @SpringBootTest для загрузки полного контекста приложения для сквозного интеграционного тестирования.

Я использую следующие зависимости для тестов:

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <version>${spring.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>5.6.2</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <version>5.6.2</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.platform</groupId>
            <artifactId>junit-platform-launcher</artifactId>
            <version>1.3.2</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>${spring.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.2</version>
            <scope>test</scope>
        </dependency>

Я попытался обновить версию зависимостей Spring для тестирования (чтобы иметь возможность включать аннотации) и сохранить версию Spring существующего проекта, но затем произошли ошибки инициализации.

Как я могу включить функции весенней загрузки для тестирования?

Время обновить. Log4shell (если нет другой причины).

Elliott Frisch 24.03.2022 13:17

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

Renis1235 24.03.2022 14:08
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
63
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Наиболее рекомендуемым решением было бы обновить весь проект. Если нет, самое простое решение — положиться на spring-boot-starter-test:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>

Это означает, что вам придется полагаться на JUnit 4 и более ранние версии Mockito, AssertJ и библиотеку тестирования Spring.

Вот аннотации, которые вы можете использовать:

  • @ExtendWith(SpringExtension.class) / @RunWith(SpringRunner.class)@RunWith(SpringJUnit4ClassRunner.class)
  • @ExtendWith(MockitoExtension.class)@RunWith(MockitoJUnitRunner.class)
  • @SpringBootTest@SpringApplicationConfiguration (не точная замена)

Тестовые срезы (@DataJpaTest, @WebMvcTest) были представлены в Весенняя загрузка 1.4, поэтому на них тоже нельзя полагаться.

Лучший способ узнать, что возможно, это проверить справочная документация Spring boot 1.2.7. Один из примеров, который они показывают:

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = SampleDataJpaApplication.class)
public class CityRepositoryIntegrationTests {

    @Autowired
    CityRepository repository;

    // ...

}

Я уже прочитал эту справочную документацию. Проблема в том, что я не могу использовать @RunWith(SpringJUnit4ClassRunner.class). Если я правильно понял, теперь класс SpringJUnit4ClassRunner доступен с версии 2.5 (есть также «ПРИМЕЧАНИЕ: Начиная с Spring Framework 4.3, для этого класса требуется JUnit 4.12 или выше»). Но @RunWith(MockitoJUnitRunner.class) и @SpringApplicationConfiguration работают.

Aricann 24.03.2022 14:04

@Aricann 2.5 - это среда Spring 2.5. Spring boot 1.2.7 основан на Spring framework 4.1.8 (источник), так что это не должно быть проблемой. Это также означает, что правило JUnit 4.12 не применяется. Даже если это применимо, преимущество этих стартеров загрузки Spring заключается в том, что они гарантируют, что все эти внутренние версии совпадают. Возможно, вы где-то загружаете какие-то другие версии Spring, которые вызывают этот конфликт.

g00glen00b 24.03.2022 14:38

Спасибо за подробности, удалось включить аннотацию @RunWith(SpringJUnit4ClassRunner.class). Проблема была в зависимостях

Aricann 24.03.2022 15:18

Есть ли способ передать аргументы командной строки, такие как @SpringBootTest({"arg1=val1"}) через @SpringApplicationConfiguration?

Aricann 24.03.2022 16:34

Другие вопросы по теме

Очередь ответов не обновляется в IBM MQ при указании типа сообщения как запроса
Передать результат метода @Transactional из службы в уровень контроллера Spring Boot
Для учетной записи Stripe Standard в качестве страны указана Индия, а не США
Liquibase, поставляемая с Spring Boot, хорошо обрабатывает базу данных с помощью changelog.xml. Как он может одновременно генерировать свой sql?
Использование внешнего API и преобразование из строки JSON в bean-компонент не инициализирует свойства. Атрибуты объекта NULL. Весенний ботинок, Мейвен
Как я могу сделать ссылку первичного ключа идентификатора пользователя на user_id в другой таблице в качестве внешнего ключа?
Jarlauncher не был найден при использовании режима весенних загрузочных инструментов
Как изменить конечную точку работоспособности по умолчанию, используемую администратором весенней загрузки
Слишком много HTTP-запросов при веб-запросе только одного видео в формате MP4
@Mockbean не работает с bean-компонентом, не заданным в нескольких классах