J'avais le même objectif (avoir un test qui exécute la méthode main()) et j'ai remarqué que le simple ajout d'une méthode de test comme @fg78nc l'a dit va en fait "démarrer" l'application deux fois : une fois par le framework de test de spring boot, une fois via l'invocation explicite de mainApp.main(new String[] {})
ce que je ne trouve pas élégant.
J'ai fini par écrire deux classes de test : une avec @SpringBootTest
et la méthode de test vide applicationContextLoaded() un autre sans @SpringBootTest
(seulement RunWith(SpringRunner.class)
) qui appelle la méthode principale.
SpringBootApplicationTest
package example;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.boot.test.context.SpringBootTest;
@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringBootApplicationTest {
@Test
public void contextLoads() {
}
}
ApplicationStartTest
package example;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
public class ApplicationStartTest {
@Test
public void applicationStarts() {
ExampleApplication.main(new String[] {});
}
}
Globalement, l'application est toujours lancée deux fois, mais parce qu'il y a maintenant deux classes de test. Bien sûr, avec seulement ces deux méthodes de test, cela semble exagéré, mais habituellement, d'autres tests seront ajoutés à la classe SpringBootApplicationTest
en profitant de @SpringBootTest
installation.
0 votes
Vous pouvez juste vous moquer
SpringApplication
à l'aide de mockito et vérifiez qu'elle a été appelée avec les bons arguments lorsque vous exécutez le programme principal.method
0 votes
Voir aussi la solution jacoco gradle : stackoverflow.com/a/43196918/907576