如何在没有继承的情况下在我的测试中共享@MockBeans和mock方法? [英] How to share @MockBeans and mock methods among my tests without inheritance?

查看:38
本文介绍了如何在没有继承的情况下在我的测试中共享@MockBeans和mock方法?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个基本测试场景,其他集成测试将使用该场景。此方案包括一些用于外部集成的模拟bean(@MockBean)。

今天,我在集成测试类中有如下内容:

@SpringBootTest
@WebAppConfiguration
@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_CLASS)
@RunWith(SpringRunner.class)
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class OrderIT {

以及准备集成测试所需的字段和注释:

private MockMvc mockMvc;

@Autowired
private WebApplicationContext wac;

@Autowired
private ObjectMapper mapper;

@MockBean
private SomeGateway someGateway;

@MockBean
private SomeRabbitMqService someRabbitMqService ;

@MockBean
private AnotherRabbitMqService anotherRabbitMqService;

@MockBean
private SomeIntegrationService someIntegrationService ;

@MockBean
private Clock clock;

@Before
public void setup() {
    //some methods mocking each service above, preparing mockMvc, etc
}
此方案对于使用MockMvc并在系统中创建主要功能MyOrder是必需的。此Order是在睡觉接口中调用POST方法创建的,将order保存到内存数据库中。

即使这样运行良好,我也需要在另一个测试中复制包含@MockBean和一些@Autowired的挡路代码,因为OrderOrder向订单添加产品、设置发货地址等的基本方案。每个方案都有不同的集成测试,但所有方案都需要Order

那么,如何在我的集成测试中共享"MockBeans"和模拟它们的方法呢?在这些测试中,我确实有过使用继承的糟糕经历,我真的很想尝试一种不同的方法。

推荐答案

我最终使用Spring profiles

我创建了一个用@Profile("test")注释的配置类,并在那里创建了模拟bean。点赞:

@Profile("test")
@Configuration
public class MyMockConfiguration {

    @Bean
    public SomeService someService() {
        SomeService someService = mock(SomeService .class);
        // mocked methods and results
        return someService ;
    }

在Test类中:

@ActiveProfiles("test")
@SpringBootTest
@WebAppConfiguration
@RunWith(SpringRunner.class)
public class MyControllerIT {

如果某个集成测试需要覆盖概要文件上的当前模拟实现,则测试只需要在类上声明@MockBean并照常继续模拟。

我还没有决定test是否是一个好名字,因为对我来说更有意义的是通过";context";模拟配置。因此,我可以使用createOrder并拥有不同的配置文件,而不是在配置文件名称上使用通用名称test,每个配置文件都有不同的名称和不同的模拟:createOrdercreateOrderWithoutProducts

这篇关于如何在没有继承的情况下在我的测试中共享@MockBeans和mock方法?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆