Nel test unitario, quali sono le differenze tra @Runwith(SpringRunner.class)
& @SpringBootTest
?
Puoi spiegarmi i casi d'uso di ognuno?
Nel test unitario, quali sono le differenze tra @Runwith(SpringRunner.class)
& @SpringBootTest
?
Puoi spiegarmi i casi d'uso di ognuno?
Risposte:
@RunWith (SpringRunner.class): è necessaria questa annotazione per abilitare solo le funzionalità di avvio a molla come @Autowire
, @MockBean
ecc. Durante i test junit
viene utilizzato per fornire un ponte tra le funzionalità di test di Spring Boot e JUnit. Ogni volta che utilizziamo qualsiasi funzionalità di test di Spring Boot nei nostri test JUnit, questa annotazione sarà richiesta.
@SpringBootTest: questa annotazione viene utilizzata per caricare il contesto completo dell'applicazione per i test di integrazione end-to-end
L'annotazione @SpringBootTest può essere utilizzata quando è necessario avviare l'intero contenitore. L'annotazione funziona creando ApplicationContext che verrà utilizzato nei nostri test.
Ecco l'articolo con chiari esempi su entrambi gli scenari Baeldung
Da spring.io :
@RunWith(SpringRunner.class)
dice a JUnit di funzionare usando il supporto per i test di Spring.SpringRunner
è il nuovo nome diSpringJUnit4ClassRunner
, è solo un po 'più facile da vedere.
@SpringBootTest
sta dicendo "bootstrap con il supporto di Spring Boot" (es. caricaapplication.properties
e dammi tutta la bontà di Spring Boot)
Quindi, se non hai bisogno di tutto ciò che Spring Boot carica per il tuo test di integrazione, potresti non averne bisogno @SpringBootTest
@RunWith è una vecchia annotazione di JUnit 4 per utilizzare i test runner. Se stai usando JUnit 5 (Jupiter), dovresti usare @ExtendWith per usare le estensioni JUnit
"Se si utilizza JUnit 4, non dimenticare di aggiungere anche @RunWith (SpringRunner.class) al test, altrimenti le annotazioni verranno ignorate. Se si utilizza JUnit 5, non è necessario aggiungere l'equivalente @ExtendWith ( SpringExtension.class) come @SpringBootTest e le altre annotazioni @… Test sono già annotate con esso.