Мне нужно протестировать старое 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 существующего проекта, но затем произошли ошибки инициализации.
Как я могу включить функции весенней загрузки для тестирования?
Вы как бы должны обновиться... Есть незакрытые уязвимости безопасности, которые могут стоить вам больше, чем рефакторинг...




Наиболее рекомендуемым решением было бы обновить весь проект. Если нет, самое простое решение — положиться на 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 2.5 - это среда Spring 2.5. Spring boot 1.2.7 основан на Spring framework 4.1.8 (источник), так что это не должно быть проблемой. Это также означает, что правило JUnit 4.12 не применяется. Даже если это применимо, преимущество этих стартеров загрузки Spring заключается в том, что они гарантируют, что все эти внутренние версии совпадают. Возможно, вы где-то загружаете какие-то другие версии Spring, которые вызывают этот конфликт.
Спасибо за подробности, удалось включить аннотацию @RunWith(SpringJUnit4ClassRunner.class). Проблема была в зависимостях
Есть ли способ передать аргументы командной строки, такие как @SpringBootTest({"arg1=val1"}) через @SpringApplicationConfiguration?
Время обновить. Log4shell (если нет другой причины).