春季启动:将模拟注入跑步者类



我有一个 Spring 启动应用程序和一些应用程序应该与之交互的其他组件。但是,在我的单元测试中,我只使用应用程序功能,我想模拟外部 API 调用。我被困住了,因为我找不到像这样模拟案例的方法:

我使用 main 方法的起始类:

@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();
    }
    ...
}

这是我的测试类示例:

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = MyApp.class)
public class MyAppTest {
    // any tests
}

我正在使用Spring Boot,JUnit,Mockito。

所以,我面临着这个问题 - 我如何避免这种方法通过反射或任何其他方式使用 Mockito 调用 createInstances((。

看看 Spring Boot 文档中的 Mocking and Spying being

您可以在测试类中使用@MockBean将自动连线的 bean 替换为 Mockito 模拟实例。

您可以使用@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 下

相关内容

  • 没有找到相关文章

最新更新