Я хотел бы реализовать интеграционный тест с Spring Boot. Я начинаю с зависимости spring-boot-starter-test
, версия 2.2.5.RELEASE
.
У меня есть следующий компонент:
@Component
public class MyMath {
public int add(int a, int b) {
return a + b;
}
}
Основная программа выглядит так:
@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));
}
}
Работает как положено - пока все хорошо. Я хотел бы добавить модульный тест:
@RunWith(SpringRunner.class)
@SpringBootTest
public class MyMathTest {
@Autowired
private MyMath myMath;
@Test
public void testSaveAndList() {
assertEquals(5, myMath.add(2, 3));
}
}
Это также работает, но согласно журналу выполняет всю программу . Я не хочу запускать саму программу, просто функцию MyMath.add()
. Как я могу это сделать?
До сих пор я пробовал следующее:
@RunWith(SpringJUnit4ClassRunner.class)
при условии того же результата. - Пропуск
@SpringBootTest
результаты NoSuchBeanDefinitionException
. - Переформатирование кода для создания компонента вместо компонента, как показано ниже.
MyMath
без аннотации:
public class MyMath {
public int add(int a, int b) {
return a + b;
}
}
Main
остается то же самое.
@Configuration
public class AppConfig {
@Bean
public MyMath getMyMath() {
return new MyMath();
}
}
И тест:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = AppConfig.class)
public class MyMathTest {
@Autowired
private MyMath myMath;
@Test
public void testSaveAndList() {
assertEquals(5, myMath.add(2, 3));
}
}
Поэтому я не могу протестировать компонент без запуска всей программы. Может ли кто-нибудь мне помочь? Спасибо!