SpringRunner vs SpringBootTest

11

Jakie są różnice w teście jednostkowym między @Runwith(SpringRunner.class)& @SpringBootTest?

Czy możesz mi wyjaśnić przypadki użycia każdego z nich?

zouari
źródło
1
Czy przeczytałeś jakąś dokumentację? Co jest jeszcze niejasne?
jonrsharpe
Oczywistą różnicą jest Wiosna Test vs testu rozruchowego wiosennej, ale to bardzo szerokie pytanie
user7294900
Zrozumiałbym, kiedy powinienem użyć @SpringBootTest oprócz SpringRunner.
zouari,

Odpowiedzi:

10

@RunWith (SpringRunner.class): Trzeba to po prostu włączyć adnotację do bagażnika takich jak sprężyna @Autowire, @MockBeanitp .. podczas testów junit

służy do zapewnienia pomostu między funkcjami testowymi Spring Boot a JUnit. Za każdym razem, gdy w testach JUnit korzystamy z jakichkolwiek funkcji testowych Spring Boot, ta adnotacja będzie wymagana.

@SpringBootTest: ta adnotacja służy do ładowania pełnego kontekstu aplikacji na potrzeby testów integracji od końca do końca

Adnotacji @SpringBootTest można użyć, gdy potrzebujemy załadować cały kontener. Adnotacja polega na utworzeniu ApplicationContext, który zostanie wykorzystany w naszych testach.

Oto artykuł z jasnymi przykładami na temat obu scenariuszy Baeldung

Deadpool
źródło
1

Od spring.io :

@RunWith(SpringRunner.class)mówi JUnitowi, aby uruchomił przy użyciu wsparcia testowego Springa. SpringRunnerto nowa nazwa SpringJUnit4ClassRunner, jest tylko trochę łatwiejsza dla oka.

@SpringBootTestmówi „bootstrap ze wsparciem Spring Boot” (np. załaduj application.propertiesi daj mi całą dobroć Spring Boot)

Jeśli więc nie potrzebujesz wszystkiego, co ładuje Spring Boot do testu integracji, możesz nie być potrzebny @SpringBootTest

Xavier FRANCOIS
źródło
0

@RunWith to stara adnotacja z JUnit 4 do używania testerów. Jeśli używasz JUnit 5 (Jupiter), powinieneś użyć @ExtendWith, aby użyć rozszerzeń JUnit

Zobacz https://docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-features.html#boot-features-testing

„Jeśli używasz JUnit 4, nie zapomnij również dodać @RunWith (SpringRunner.class) do testu, w przeciwnym razie adnotacje zostaną zignorowane. Jeśli używasz JUnit 5, nie musisz dodawać równoważnego @ExtendWith ( SpringExtension.class) jako @SpringBootTest i inne @… Adnotacje testowe są już z nim opatrzone adnotacjami.

Tore Gard at techpros no
źródło