美文网首页
微服务单元测试SpringBoot-Mockito

微服务单元测试SpringBoot-Mockito

作者: BeRicher | 来源:发表于2019-05-08 13:39 被阅读0次

介绍

在真实的业务场景,我们的服务经常会调用三方的接口或者内部其他服务的接口。
此时如果外部系统的接口不可用,我们就需要模拟它的返回值,如果通过在代码中硬编码的形式,会额外的增加工作量。
Mockito框架可以创建和配置mock对象.它简化了具有外部依赖的单元测试,我们可以使用Mockito针对具有外部依赖的service层进行测试。
一般来说Mockito的使用步骤:

  1. 将外部依赖通过Mockito进行模拟构造。
  2. 将构造后的依赖注入到引用它的类中。
  3. 为模拟的外部依赖,编写期望返回的结果。
  4. 正常调用需要进行单元测试的方法。

快速使用

我们使用RestTemplate模拟真实场景下微服务内部的调用。

开启注解

在setup中开启mockito的注解:MockitoAnnotations.initMocks(this)

@RunWith(SpringJUnit4ClassRunner.class)
public abstract class BaseTest {
    @Autowired
    protected WebApplicationContext wac;
    protected MockMvc mockMvc;

    @Before
    public void setup() {
        this.mockMvc = MockMvcBuilders.webAppContextSetup(wac).build();
        MockitoAnnotations.initMocks(this);
    }
}

创建需要单元测试的接口

@RestController
@RequestMapping("/demo")
public class DemoController {
    @Autowired
    private RestTemplate restTemplate;

    @GetMapping("/testRestTemplate")
    public ResponseEntity<String> test() {
        return restTemplate.getForEntity("xxx", String.class);
    }
}

编写单元测试

/**
 * @author zhangbowen
 * @since 2019/4/13
 */
@SpringBootTest(classes = TestApplication.class)
public class ApiTest extends BaseTest {
    //标识该template为mock生成的
    @MockBean
    private RestTemplate restTemplate;


    /**
     * mock restTemplate 测试
     */
    @Test
    public void restTemplate() throws Exception {
        //Mockito.when表示当执行某个方法时进行模拟
        //Mockito.any()代表任意参数
        //thenReturn表示期望模拟返回的结果
        Mockito.when(restTemplate.getForEntity(Mockito.anyString(), Mockito.any()))
.thenReturn(new ResponseEntity<>("aaaa", HttpStatus.OK));
         MockHttpServletRequestBuilder mockHttpServletRequestBuilder = MockMvcRequestBuilders
                .get("/demo/testRestTemplate");
        super.buildRequest(() -> mockHttpServletRequestBuilder);
    }
}

想不想看看墙外的世界
高质量图片压缩工具

相关文章

  • 微服务单元测试SpringBoot-Mockito

    介绍 在真实的业务场景,我们的服务经常会调用三方的接口或者内部其他服务的接口。此时如果外部系统的接口不可用,我们就...

  • H3BPM Controllers 单元测试(二)

    单元测试的范围代码中往往会存在一定的依赖。一个简单的业务可能会依赖于第三方服务,邮件服务、微信服务、钉钉服务等。一...

  • 技术博客汇总

    对微信公众号接口的单元测试 Github与Travis CI测试与部署 Django单元测试 NodeJs单元测试...

  • Python的接口的单元测试并自动将结果发至邮件

    流程介绍:1、搭建一个服务2、编写接口单元测试3、将单元测试生成报告并自动发送邮箱 下面开始编写单元测试:已tes...

  • Angular 单元测试实践 (3)

    对 Angular 服务的单元测试,可以分为三类: 测试同步操作 测试异步操作 测试服务依赖 在测试服务前,我们先...

  • 微服务单元测试

    什么是单元测试 单元测试是指,对软件中的最小可测试单元在与程序其他部分相隔离的情况下进行检查和验证的工作,这里的最...

  • 一文弄懂Springboot+Junit5微服务单元测试编写实践

    Springboot+Junit5微服务单元测试编写实践 现在写单元测试的重要性不言而喻,下边说明一下Junit5...

  • 单元测试之embedded-zookeeper

    背景 在微服务架构中,Zookeeper扮演着非常重要的角色,很多服务的部署、运行依赖于它。 因此,在单元测试/集...

  • 改善单元测试的新方法

    我们为什么要写单元测试? "满足需求"是所有软件存在的必要条件,单元测试一定是为它服务的。从这一点出发,我们可以总...

  • Mockito-第一篇

    开启Mockito单元测试系列,这是第一篇。本文将介绍如何用Mockito来mock一个股票服务接口,在服务尚未实...

网友评论

      本文标题:微服务单元测试SpringBoot-Mockito

      本文链接:https://www.haomeiwen.com/subject/amymoqtx.html