Faites des excuses car cela peut sembler être un acte inutile, mais est-il possible de faire un test junit sur Application.Java de Spring-Boot (1.3.8.RELEASE) pour lequel cette classe ne fait que démarrer un démarrage Spring application?
Donnée ci-après:
@SpringBootApplication
public class Application {
public static void main(String[] args) {
try{
SpringApplication.run(Application.class, args);
}catch(Exception e){
//code here
}
}
}
Peut-être que je peux essayer d'attraper l'exception? mais quoi d'autre puis-je éventuellement tester pour que JUnit teste SpringApplication.run ()? tout exemple est apprécié. Merci à tous!
En règle générale, les éléments suivants suffisent pour vérifier que le contexte de l’application démarre.
@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class)
public class ApplicationTests {
@Test
public void contextLoads() {
}
}
Toutefois, si vous souhaitez tester directement Application.main
, vous pouvez également le tester de la manière suivante:
public class ApplicationTest {
@Test
public void test()
{
Application.main(new String[]{
"--spring.main.web-environment=false",
"--spring.autoconfigure.exclude=blahblahblah",
// Override any other environment properties according to your needs
});
}
}
Peut-être que je peux essayer d'attraper l'exception? mais quoi d'autre puis-je éventuellement tester afin que JUnit teste SpringApplication.run ()? tout exemple est apprécié. Merci à tous!
Faire échouer le test si une exception est interceptée est ici impuissant, car une exception levée lors d'un test a déjà pour conséquence de faire échouer le test (plus précisément par erreur).
Si vous exécutez déjà des classes de test qui chargent tout le contexte de démarrage de Spring (@SpringBootTest
), vous n'avez pas besoin d'écrire un test pour vérifier qu'il est correctement chargé.
Vous devriez tester la classe Application
si elle a une certaine logique.
Par exemple, vous pouvez déclarer une méthode annotée avec @Before
qui effectue certains traitements après le chargement du contexte et vous souhaitez affirmer que le traitement est effectué comme il se doit. Autre exemple: vous pouvez passer des arguments dans la méthode main()
et vous souhaitez affirmer que les arguments sont utilisés par la méthode comme prévu.
Tout ce qui est testable avec @SpringBootTest
.
Si votre classe Application
ne fait que:
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
mais vous devez tout de même couvrir la méthode de test main()
pour vous conformer à un outil de couverture ou à une organisation, créer un test d'intégration pour cela, la documenter clairement et laisser l'intégration continue le faire car le chargement d'une application Spring Boot prend du temps. Vous pouvez vous référer à cette question .