Je voudrais mettre en œuvre un test d'intégration avec Spring Boot. Je commence par la spring-boot-starter-test
dépendance, la version 2.2.5.RELEASE
.
Je le composant suivant:
@Component
public class MyMath {
public int add(int a, int b) {
return a + b;
}
}
Le programme principal ressemble à ceci:
@SpringBootApplication
public class Main implements CommandLineRunner {
public static void main(String[] args) {
SpringApplication.run(Main.class, args);
}
@Autowired
private MyMath myMath;
@Override
public void run(String... args) throws Exception {
System.out.println(myMath.add(2, 3));
}
}
Il fonctionne comme prévu - à ce jour, si bon. Je voudrais ajouter un test unitaire:
@RunWith(SpringRunner.class)
@SpringBootTest
public class MyMathTest {
@Autowired
private MyMath myMath;
@Test
public void testSaveAndList() {
assertEquals(5, myMath.add(2, 3));
}
}
Cela fonctionne également, mais selon le journal , il exécute tout le programme . Je ne veux pas courir le programme lui - même, juste la MyMath.add()
fonction. Comment puis je faire ça?
J'ai essayé ce qui suit à ce jour:
@RunWith(SpringJUnit4ClassRunner.class)
à condition que le même résultat.- Omettre
@SpringBootTest
résultatsNoSuchBeanDefinitionException
. - Reformater le code pour avoir haricots au lieu de composants comme ci-dessous cela fonctionne.
MyMath
sans annotation:
public class MyMath {
public int add(int a, int b) {
return a + b;
}
}
Main
reste le même.
@Configuration
public class AppConfig {
@Bean
public MyMath getMyMath() {
return new MyMath();
}
}
Et le test:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = AppConfig.class)
public class MyMathTest {
@Autowired
private MyMath myMath;
@Test
public void testSaveAndList() {
assertEquals(5, myMath.add(2, 3));
}
}
Donc ce que je ne peux pas faire est de tester un composant sans exécuter le programme. Quelqu'un pourrait-il me aider? Merci!
Vous n'avez pas besoin de refactoriser votre code. Il suffit de garder la classe MyMath comme il est
@Component
public class MyMath {
public int add(int a, int b) {
return a + b;
}
}
Changez votre classe de test comme celui-ci
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = MyMath.class)
public class MyMathTest {
@Autowired
private MyMath myMath;
@Test
public void testSaveAndList() {
assertEquals(5, myMath.add(2, 3));
}
}
Cela devient un peu complexe si votre classe MyMath a d'autres dépendances autowired. Ensuite, vous devez utiliser simulacres.