我有一个spring boot应用程序和应用程序应该与之交互的一些其他组件。但是,在我的单元测试中,我只使用应用程序功能,我想模拟外部API调用。我陷入困境,因为我找不到像这样模仿案件的方法:
我用main方法开始上课:
uploadSuccess: {
endpoint: X
},
这是我的测试类示例:
@ComponentScan("com.sample.application")
@SpringBootApplication
public class MyApp implements CommandLineRunner {
@Autowired
private OuterAPI outerAPI;
public static void main(String[] args) {
SpringApplication.run(AdRedirectorMain.class, args);
}
@Override
public void run(String... args) throws Exception {
outerAPI.createInstances();
}
...
}
我正在使用Spring Boot,JUnit,Mockito。
所以,我正面临着这个问题 - 我怎么能避免这个方法用Mockito调用createInstances(),通过反射或任何其他方式。
答案 0 :(得分:2)
在Spring Boot文档中查看Mocking and spying beans。
您可以在测试类中使用@MockBean
将自动装配的bean替换为Mockito模拟实例。
答案 1 :(得分:2)
您可以使用@MockBean
http://docs.spring.io/spring-boot/docs/current/api/org/springframework/boot/test/mock/mockito/MockBean.html
或者您可以定义一个OuterAPI实现的接口,然后为您的测试提供一个虚拟实现,进行虚拟调用而不是实际调用outerAPI.createInstances();
您拥有的另一个选择是拥有如下配置类:
@Configuration
@Profile(value = {"yourtest-profile"})
public class TestConfiguration{
@Primary
@Bean
public OuterAPI outerAPI() {
return Mockito.mock(OuterAPI.class);
}
}
并将其放在scr / test / java
下