Первая аннотация @RunWith (SpringRunner.class) используется для обеспечения моста между функциями тестирования Spring Boot и JUnit. SpringRunner.class обеспечивает полную поддержку загрузки контекста Spring и внедрения зависимостей бинов в тестах. @SpringBootTest создает тесты ApplicationContext через SpringApplication, которые будут использоваться в наших тестах. Он загружает весь контейнер начиная со встроенного сервера и создает веб-среду.
В нашем тесте мы можем имитировать c реальную веб-среду, задавая его как RANDOM_PORT, который также загружает WebServerApplicationContext. Встроенный сервер запускается и прослушивает произвольный порт.
@RunWith(SpringRunner.class)
@SpringBootTest(classes = {YourPackage.class}, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
class YourClassTest {
@LocalServerPort
private int port;
@Autowired
TestRestTemplate restTemplate;
HttpHeaders headers = new HttpHeaders();
@ParameterizedTest
@JsonFileSource(resources = "/param.json")
void createBusinessEntity(JsonObject object){
....
}
}
@ Аннотация LocalServerPort предоставляет нам введенный порт HTTP, который был выделен во время выполнения. Это удобная альтернатива для @Value ("$ {local.server.port}").
Для доступа к стороннему REST-сервису в приложении Spring мы используем Spring RestTemplate или TestRestTemplate - удобную альтернативу, которая подходит для интеграционных тестов, внедряя его в наш тестовый класс. С зависимостью spring-boot-starter-test в нашем проекте мы можем получить доступ к классу «TestRestTemplate» во время выполнения.
В нашем тестовом методе мы используем junit- json -params, Junit 5 библиотека, которая предоставляет аннотации для загрузки данных из JSON строк или файлов в параметризованных тестах. Мы также аннотировали метод аннотацией @ParameterizedTest, чтобы дополнить библиотеку ниже. Он используется для обозначения аннотированного метода параметризованным методом тестирования. Этот метод не должен быть частным или статическим c. Они также должны указать хотя бы один аргумент ArgumentsProvider через @ArgumentsSource или соответствующую составную аннотацию.
Наш @ArgumentsSource JSON файл @JsonFileSource (resources = "param. json"), который мы помещаем в тест. пакет ресурсов. @JsonFileSource позволяет вам использовать JSON файлы из пути к классам. Он поддерживает отдельные объекты, массивы объектов и JSON примитивы.
Объект JSON, извлеченный из файла, привязывается к параметру метода "object", который он преобразует в объект POJO, в данном случае , наша модель сущности.
В Pom. xml мы должны импортировать эти библиотеки ...
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>com.vaadin.external.google</groupId>
<artifactId>android-json</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>net.joshka</groupId>
<artifactId>junit-json-params</artifactId>
<version>5.5.1-r0</version>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-junit-jupiter</artifactId>
<version>${mockito.version}</version>
</dependency>
<dependency>
<groupId>org.junit</groupId>
<artifactId>junit-bom</artifactId>
<version>${junit-jupiter.version}</version>
<scope>import</scope>
<type>pom</type>
</dependency>
Взгляните на эти статьи в посте на DZone и в моем блоге, где Вы можете получить доступ к полному образцу и объяснениям шаг за шагом, как протестировать микросервис с пружинной загрузкой, используя Junit 5. https://dzone.com/articles/microservices-in-publish-subscribe-communication-u https://www.jeevora.com/2019/11/18/publish-subscribe-messaging-systems/