test unitaire de démarrage ressort exécute le programme complet

Csaba Farago:

Je voudrais mettre en œuvre un test d'intégration avec Spring Boot. Je commence par la spring-boot-starter-testdé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 @SpringBootTestrésultats NoSuchBeanDefinitionException.
  • 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!

pvpkiran:

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.

Je suppose que tu aimes

Origine http://43.154.161.224:23101/article/api/json?id=373212&siteId=1
conseillé
Classement