SpringBoot 使用Mock单元测试

这篇具有很好参考价值的文章主要介绍了SpringBoot 使用Mock单元测试。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

测试一般分为两种黑盒测试和白盒测试。

        黑盒测试又称为功能测试数据驱动测试,测试过程中,程序看作成一个黑色盒子,看不到盒子内部代码结构。

        白盒测试又称为结构测试逻辑驱动测试,测试过程中,程序看作一个透明盒子,能够看清盒子内部的代码和结构,这样测试人员对程序代码的逻辑有所知晓。

1. Junit 的注解

@Test:使用该注解标注的public void方法会表示为一个测试方法;
@BeforeClass:表示在类中的任意public static void方法执行之前执行;
@AfterClass:表示在类中的任意public static void方法之后执行;
@Before:表示在任意使用@Test注解标注的public void方法执行之前执行;
@After:表示在任意使用@Test注解标注的public void方法执行之后执行;

2. Mock模拟测试

mock就是创建一个类的虚假的对象,在测试环境中,用来替换掉真实的对象,只是模拟执行,并不会真正的执行。

  • @InjectMocks:通过创建一个实例,它可以调用真实代码的方法,其余用@Mock(或@Spy)注解创建的mock将被注入到用该实例中。

  • @Mock:对函数的调用均执行mock(即虚假函数),不会调用真实的方法。

  • @Spy:对函数的调用均执行真正部分。

3.常用的 Mockito 方法

  • do/when:包括doThrow(…).when(…)/doReturn(…).when(…)/doAnswer(…).when(…)
  • given/will:包括given(…).willReturn(…)/given(…).willAnswer(…)
  • when/then: 包括when(…).thenReturn(…)/when(…).thenAnswer(…)/when(…).thenThrow(…)

4. Springboot测试

对于Springboot有些属性没办法Mock,比如@Value的注解。

但是可以使用

ReflectionTestUtils.setField(aService, "bService", bServiceMock);

5. 测试代码 

public class AService {

    BService bService;

    public String aCallB() {
        String bResult = bService.bCallBaidu();
        return "这是a;b返回:" + bResult;
    }
}
public class BService {

    @Autowired
    RestTemplate restTemplate;

    public String bCallBaidu() {
        ResponseEntity<String> responseEntity = restTemplate.exchange("www.baidu.com", HttpMethod.POST, new HttpEntity<String>(""), String.class);
        return "这是b call baidu的结果:" + responseEntity;
    }
}
@RunWith(MockitoJUnitRunner.class)
public class AServiceTest {

    @InjectMocks
    AService aService;

    /**
     * @Mock 只是初始化一个模拟的实例化对象,并不会执行实例化的方法
     */
    @Mock
    BService bServiceMock;


    /**
     * @InjectMocks 实例化一个对象,并且会执行实例化对象的方法
     */
    @InjectMocks
    BService bServiceInjectMock;

    @Mock
    RestTemplate restTemplate;

    @Test
    public void testMock() {
        ReflectionTestUtils.setField(aService, "bService", bServiceMock);
        String result = aService.aCallB();
        System.out.println(result);

        Mockito.doReturn("模拟B返回").when(bServiceMock).bCallBaidu();
        result = aService.aCallB();
        System.out.println(result);
    }

    @Test
    public void testInjectMocks() {
        ReflectionTestUtils.setField(aService, "bService", bServiceInjectMock);
        // 如果不对restTemplate进行Mocke处理,bServiced的则会异常
//        String result = aService.aCallB();
//        System.out.println(result);

        Mockito.doReturn(new ResponseEntity<>("RestTemplate模拟返回成功", HttpStatus.OK))
                .when(restTemplate)
                .exchange(Mockito.anyString(), Mockito.eq(HttpMethod.POST), Mockito.any(HttpEntity.class), Mockito.eq(String.class));

        String result = aService.aCallB();
        System.out.println(result);
    }
}

springboot mock 测试,Spring Boot,单元测试

参考:

 在SpringBoot中编写Mock单元测试 - 简书

SpringBoot——单元测试实践总结_springboot集成test框架单元测试-CSDN博客文章来源地址https://www.toymoban.com/news/detail-841840.html

到了这里,关于SpringBoot 使用Mock单元测试的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring Boot单元测试使用MockBean注解向Service注入Mock对象

    我们在测试时有一个Service,我们需要测试Service,但Service内部依赖ServiceA、ServiceB,此时我们希望Mock ServiceA,ServiceB 注入真实对象。 在Spring Boot Test中使用@Spy注解标记Service对象,但是其余真实对象无法注入,因为@Spy注解只能部分模拟对象,而无法注入真实对象。在这种情况下

    2024年02月13日
    浏览(26)
  • spring boot 单元测试JUnit5使用Mockito模拟Mock数据调用

    spring boot 单元测试JUnit5使用Mockito模拟Mock数据调用 好大一批新用法,大家静下心来好好看看吧 1. spring boot 使用 Mockito.when().thenReturn()模拟返回值 Mockito 是一种 Java mock 框架,他主要就是用来做 mock 测试的,他可以模拟任何 Spring 管理的 bean、模拟方法的返回值、模拟抛出异常…

    2024年02月15日
    浏览(37)
  • Spring Boot集成单元测试之如何mock

    前言 我们在购买电脑的时候,一次就可以开机了,这是因为在出厂的时候厂家就帮我们做好了测试。那如果没有厂家这步,我们会面临显示器无法显示的问题,磁盘无法挂载等情况。那运气好可能一次就能定位,运气不好,还需要排查显示器,内存条,主板,显卡等一系列组

    2024年04月12日
    浏览(24)
  • 测试人必会的Python内置库:unittest.mock(单元测试mock的基础使用)

    unittest.mock是用于在单元测试中模拟和替换指定的对象及行为,以便测试用例更加准确地进行测试运行。例如对于以下代码,想要针对函数func_a写一个简单的单元测试: 但是这样的话,函数func_b和func_c的逻辑都需要一起测试,在单元测试中这明显是不合理的,对于想要测试的

    2024年02月01日
    浏览(33)
  • 15.Spring Boot单元测试(Service、Mock、Feign、Http Rest API)

    Spring Boot专栏目录(点击进入…) **test**表示依赖的组件仅仅参与测试相关的工作,包括测试代码的编译和执行,不会被打包包含进去;spring-boot-starter-test是Spring Boot提供项目测试的工具包,内置了多种测试工具,方便我们在项目中做单元测试、集成测试。 引入spring-boot-star

    2024年02月04日
    浏览(30)
  • C++类对象单元测试中的Mock使用

      在进行单元测试时,我们想要测试自己缩写 函数A ,但是 函数A 却依赖于 函数B ,当 函数B 无法满足预期时就无法对 函数A 进行测试,主要由于下面几个原因: 函数B 依赖于硬件设备 真实的 函数B 的返回值无法满足我们的预期 团队开发中 函数B 尚未实现   这时就需要

    2023年04月15日
    浏览(29)
  • python技术栈 之 单元测试中mock的使用

    一、什么是mock? mock测试就是在测试过程中,对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象来创建以便测试的测试方法。 二、mock的作用 特别是开发过程中上下游未完成的工序导致当前无法测试,需要虚拟某些特定对象以便测试。 unittest是python内置的单元测

    2024年02月13日
    浏览(28)
  • python技术栈之单元测试中mock的使用

    mock测试就是在测试过程中,对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象来创建以便测试的测试方法。 特别是开发过程中上下游未完成的工序导致当前无法测试,需要虚拟某些特定对象以便测试。 unittest是python内置的单元测试库,在做接口测试时,如果开

    2024年02月08日
    浏览(33)
  • 在Java微服务项目中,如何使用Mock来进行单元测试?

    摘要: 在系统开发的过程中,单元测试是其中的一个重要环节。在Java微服务项目中,Spring框架本身就为我们提供了一套单元测试的框架SpringBootTest。如果我们在学校完成课堂作业或出于兴趣爱好自学,是可以使用Spring自带的单元测试框架进行单测的。 工作中,这种通过Spri

    2024年02月16日
    浏览(27)
  • 单元测试与Mock

    作者:一笑钦陈 邮箱:xianqin_chen@163.com 你好,我是一笑钦陈,《零零后程序员成长之路》作者,一线互联网 Java 工程师。很高兴你阅读我的博客,让我们共同成长进步! 提醒:在接下来您对本博客的阅读中,如果遇到一些内容、图稿、代码等中的勘误都可以通过邮件进行反

    2024年02月08日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包