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, @MockBeanecc. 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.
@SpringBootTeststa dicendo "bootstrap con il supporto di Spring Boot" (es. caricaapplication.propertiese 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.