Spring boot:将mock注入Runner类

时间:2017-02-14 21:52:38

标签: java spring spring-boot mockito

我有一个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(),通过反射或任何其他方式。

2 个答案:

答案 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