web-dev-qa-db-fra.com

Comment faire pour tester le fichier Application.java de Spring-Boot

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!

9
R.C

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
        });
    }
}
23
user1024314

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 .

0
davidxxx