У одиничному тесті, які відмінності між @Runwith(SpringRunner.class)
& @SpringBootTest
?
Чи можете ви пояснити мені випадки використання кожного з них?
У одиничному тесті, які відмінності між @Runwith(SpringRunner.class)
& @SpringBootTest
?
Чи можете ви пояснити мені випадки використання кожного з них?
Відповіді:
@RunWith (SpringRunner.class): Вам потрібно це анотацію просто включити пружинний завантаження функції , такі як @Autowire
, і @MockBean
т.д .. під час тестування JUnit
використовується, щоб забезпечити міст між функціями тесту Spring Boot та JUnit. Кожен раз, коли ми використовуємо будь-які функції тестування Spring Boot в наших тестах JUnit, ця примітка буде потрібна.
@SpringBootTest: Ця примітка використовується для завантаження повного контексту програми для тестування інтеграції від кінця до кінця
Анотацію @SpringBootTest можна використовувати, коли нам потрібно завантажувати весь контейнер. Анотація працює, створюючи ApplicationContext, який буде використаний у наших тестах.
Ось стаття з чіткими прикладами обох сценаріїв Baeldung
Від spring.io :
@RunWith(SpringRunner.class)
каже JUnit запустити за допомогою тестової підтримки Spring.SpringRunner
це нова назва дляSpringJUnit4ClassRunner
, це просто трохи простіше на око.
@SpringBootTest
говорить "завантажувальний апарат із підтримкою Spring Boot" (наприклад, завантажтеapplication.properties
та дайте мені все добро для Spring Boot)
Тож якщо вам не потрібно все, що завантажує Spring Boot для вашого інтеграційного тесту, вам може не знадобитися @SpringBootTest
@RunWith - це стара примітка від JUnit 4 для використання тестових бігунів. Якщо ви використовуєте JUnit 5 (Jupiter), вам слід використовувати @ExtendWith, щоб використовувати розширення JUnit
"Якщо ви використовуєте JUnit 4, не забудьте додати @RunWith (SpringRunner.class) до свого тесту, інакше примітки будуть проігноровані. Якщо ви використовуєте JUnit 5, не потрібно додавати еквівалент @ExtendWith ( SpringExtension.class) як @SpringBootTest та інші @ ... Тестові примітки вже зазначаються з ним.