JAVA测试类注解以及Mock测试

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

我们在项目中,经常要编写一个测试类XXXXXTest,其中一般会用到以下注解:

一、常用注解

1. @RunWith(PowerMockRunner.class)

JUnit将会调用@RunWith中指定的测试执行类而不是JUnit默认的执行类。

2.@PrepareForTest({ExampleTestServer.class})

        2.1 当使用Mockito.whenNew方法时(下面的Mock测试),必须加此注解,此注解里写的类是需要mock的new对象代码所在的类。

        2.2 当需要使用mock final、mock static方法、mock private方法、mock系统类的静态方法时,必须加此注解,此注解里写的分别是该方法所在的类。

3.@InjectMocks

创建一个实例,其余用@Mock(或@Spy)注解创建的mock将被注入到用该实例中。

(通常在真正运行时,会使用@Autowired等方式完成自动注入。但是在单元测试中,没有启动spring框架,此时就需要@InjectMocks来完成依赖注入,@InjectMocks会将带有@Mock以及@Spy注解的对象注入到被测试的目标类中:

  • 在进行单元测试时,不应初始化 Spring 上下文。因此,请@Autowired。
  • 在进行集成测试时,应使用真正的依赖项。所以去掉Mock)

4.@Mock

@Mock:创建一个Mock。

5.@Test

被打上该注解的方法,表示为一个测试方法。

二、Mock测试

1.Stub打桩

Mockito 中 when().thenReturn(); 这种语法来定义对象方法和参数(输入),然后在 thenReturn 中指定结果(输出)。此过程称为 Stub 打桩 。一旦这个方法被 stub 了,就会一直返回这个 stub 的值。

Mockito.when(request.getParameter("csdn")).thenReturn("lirenji");

注意:

  • 对于 static 和 final 方法, Mockito 无法对其 when(…).thenReturn(…) 操作。
  • 当我们连续两次为同一个方法使用 stub 的时候,他只会只用最新的一次。

2.迭代打桩

第一次调用 i.next() 将返回 ”Hello”,第二次的调用会返回 ”World”。

// 方法一   (三个方法等价)
when(i.next()).thenReturn("Hello").thenReturn("World");
// 方法二
when(i.next()).thenReturn("Hello", "World");
// 方法三
when(i.next()).thenReturn("Hello"); when(i.next()).thenReturn("World");

3.抛出异常

//一般情况
when(i.next()).thenThrow(new RuntimeException());
 // void 方法的
doThrow(new RuntimeException()).when(i).remove();
// 迭代风格  (第一次调用 remove 方法什么都不做,第二次调用抛出 RuntimeException 异常)
doNothing().doThrow(new RuntimeException()).when(i).remove(); 

4.Any

anyString() 匹配任何 String 参数,anyInt() 匹配任何 int 参数,anySet() 匹配任何 Set,any() 则意味着参数为任意值 any(User.class) 匹配任何 User类。

when(mockedList.get(anyInt())).thenReturn("element");   
System.out.println(mockedList.get(999));// 此时打印是 element
System.out.println(mockedList.get(777));// 此时打印是 element

 Example:

有如下代码段:

@Service
public class MyService {
 
    @Autowired
    private MyRepository myRepository;

    @Autowired
    private YourRepository yourRepository;
 
    public void doSomething() {
        this.myRepository.doSomething();
    }
}

测试类:文章来源地址https://www.toymoban.com/news/detail-426019.html

@RunWith(MockitoJUnitRunner.class)
@PrepareForTest(MyService.class)
public class UserServiceTest {

    @InjectMocks
    private MyService myService;
 
    @Mock
    private MyRepository myRepository;

    @Mock
    private YourRepository yourRepository;
 
    @Test
    public void testInjectMocks() {
        System.out.println(myService.getMyRepository().getClass());
    }
}

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

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

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

相关文章

  • springboot使用@Valid 和 @Validated 注解校验详解以及编写一个自定义全局异常类

    全局异常处理类 验证: ============================================== 导入所需要的包: 如果你是 springboot 项目,那么可以不用引入了,已经引入了,他就存在于最核心的 web 开发包里面。 如果你不是 springboot 项目,那么引入下面依赖即可: 新建三个实体类 实现一: 使用@Valid注解修

    2024年02月10日
    浏览(29)
  • 工作中,我们经常用到哪些SQL语句呢?

    目录 一、DDL部分(create、drop、alter) 1.1 create 语句上 1.2 drop 语句 1.3 alter 语句 二、DML(数据操纵语言)和DQL(数据查询语言) 2.1 insert 语句 2.2 update 语句 2.3 delete 语句 2.4 select 语句 2.5 其他操纵语言 2.5.1 truncate 语句 2.5.2 merge 语句 三、用户角色权限 3.1 用户相关 3.1.1 创建用户

    2024年02月03日
    浏览(32)
  • Java单元测试之Mock指定方法

    单元测试时,假如你遇到某个内部方法无法正常调用;我们可以使用mock工具去解决,方法如下:

    2024年02月13日
    浏览(30)
  • Java的单元测试Testng和mock

    目录 单元测试重要性 TestNG TestNG官网介绍 TestNG教程 TestNG注解: 

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

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

    2024年02月16日
    浏览(26)
  • JAVA学习-注解.基于注解的单元测试

            基于注解的单元测试是一种使用注解来简化和增强测试代码编写和执行的方法。在Java中,有多个基于注解的单元测试框架可供选择,包括JUnit、TestNG等。下面将对几个常见的基于注解的单元测试框架进行概述,并介绍它们的特点、使用方法以及与其他框架的比较。

    2024年04月28日
    浏览(23)
  • Java注解、文件IO以及匿名函数

    注解可以在类、方法、构造器、成员变量、参数等地方进行使用,其作用是让其他程序根据注解的信息来决定怎么执行程序。 自定义注解的形式如下: 特殊属性名:value 。 如果注解中只有一个 value 属性,那么使用注解时, value 名称可以不写。 创建一个 Mytest1 的注解,注解

    2024年02月10日
    浏览(31)
  • Linux驱动开发笔记(三):基于ubuntu的helloworld驱动源码编写、makefile编写以及驱动编译加载流程测试

    若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/130542981 红胖子网络科技博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中… 上一篇:《Linux驱动开发笔记(二

    2024年02月05日
    浏览(33)
  • 【JAVA】单元测试、反射、注解、动态代理

    @Test 测试方法 @Before 用来修饰实例方法,该方法会在每一个测试方法执行之前执行一次。 @After 用来修饰实例方法,该方法会在每一个测试方法执行之后执行一次。 @Before Class 用来静态修饰方法,该方法会在所有测试方法之前只执行一次。 @After Class 用来静态修饰方法,该方法

    2024年02月11日
    浏览(30)
  • Java高级技术:单元测试、反射、注解

    目录 单元测试 单元测试概述 单元测试快速入门 单元测试常用注解 反射 反射概述 反射获取类对象 反射获取构造器对象 反射获取成员变量对象 反射获取方法对象 反射的作用-绕过编译阶段为集合添加数据 反射的作用-通用框架的底层原理 注解 注解概述 自定义注解 元注解

    2024年01月16日
    浏览(40)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包