Java单元测试之 Mockito

简介: 对于程序员是否有必要编写test case,何时编写依然存在很多争议,各种互斥的方法论(SE/AM/XP/TDD),以及不同的开发文化,但是可以确定是编写单元测试用例有助于提高编程能力。
Mockito是一款针对Java的针对Java的mocking框架。在单元测试过程中,对于某些不容易构造或者不容易获取比较复杂的对象,用一个虚拟的对象(Mock 对象)来创建以便测试的测试方法。
Mock 最大的功能是帮你把单元测试的耦合分解开,如果你的代码对另一个类或者接口有依赖,它能够帮你模拟这些依赖,并帮你验证所调用的依赖的行为。

Maven依赖

    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.mockito</groupId>
        <artifactId>mockito-core</artifactId>
        <scope>test</scope>
    </dependency>

Mock测试示例

@RunWith(MockitoJUnitRunner.class) // 使用MockitoJUnitRunner进行mocks的初始化和注入
public class DemoControllerTest {

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

    @Mock // 创建一个Mock实例,单元测试运行会被注入到@InjectMocks创建的实例中。
    DemoService demoService;

    @Test
    public void quaryName() {

        // 当调用mock对象demoService.quaryName()方法时,返回默认值
        when(demoService.quaryName(0)).thenReturn("test_name");
        // 执行业务方法demoController.quaryName()
        String name = demoController.quaryName(0);
        // 验证当执行业务方法时,是否执行了mock方法 atLeastOnce()表示最少执行1次
        verify(demoService, atLeastOnce()).quaryName(0);
        // 断言业务方法的返回值
        assertEquals("test_name", name);
    }
}
Mockito虽然在Java单元测试中能够很轻松的对一些无法获得对象进行mock,但它无法完成对private/static/final方法的Mock,此时可以使用 PowerMock,PowerMock基于Mockito开发,且语法规则与Mockito一致。
不过静态或私有方法是否需要进行mock模拟也是得我们进行思考的。
相关文章
|
30天前
|
Java 测试技术 API
Java 新手入门:Java单元测试利器,Mock详解
Java 新手入门:Java单元测试利器,Mock详解
73 1
|
13天前
|
IDE Java 测试技术
揭秘Java高效编程:测试与调试实战策略,让你代码质量飞跃,职场竞争力飙升!
【8月更文挑战第30天】在软件开发中,测试与调试对确保代码质量至关重要。本文通过对比单元测试、集成测试、调试技巧及静态代码分析,探讨了多种实用的Java测试与调试策略。JUnit和Mockito分别用于单元测试与集成测试,有助于提前发现错误并提高代码可维护性;Eclipse和IntelliJ IDEA内置调试器则能快速定位问题;Checkstyle和PMD等工具则通过静态代码分析发现潜在问题。综合运用这些策略,可显著提升代码质量,为项目成功打下坚实基础。
33 2
|
21天前
|
XML Java 测试技术
Selenium WebDriver自动化测试(基础篇):不得不掌握的Java基础
关于Selenium WebDriver自动化测试的Java基础篇,涵盖了Java的变量、数据类型、字符串操作、运算符、流程控制、面向对象编程、关键字用法、权限修饰符、异常处理和IO流等基础知识点,为进行自动化测试提供了必要的Java语言基础。
18 1
|
21天前
|
IDE Java 测试技术
单元测试问题之Mockito 3.4mock静态方法如何解决
单元测试问题之Mockito 3.4mock静态方法如何解决
21 1
|
21天前
|
Java 测试技术 Maven
单元测试问题之在Maven项目中引入JUnit 5和Mockito的依赖如何解决
单元测试问题之在Maven项目中引入JUnit 5和Mockito的依赖如何解决
86 1
|
2月前
|
测试技术
详解单元测试问题之Mockito中添加或更新打桩列表如何解决
详解单元测试问题之Mockito中添加或更新打桩列表如何解决
36 3
|
2月前
|
测试技术
详解单元测试问题之Mockito中@Mock注解的执行步骤如何解决
详解单元测试问题之Mockito中@Mock注解的执行步骤如何解决
24 2
|
2月前
|
Java 测试技术 API
详解单元测试问题之Mockito的注入过程如何解决
详解单元测试问题之Mockito的注入过程如何解决
43 1
|
27天前
|
测试技术 开发者
单元测试问题之在Mockito中静态方法的调用,如何模拟
单元测试问题之在Mockito中静态方法的调用,如何模拟
|
28天前
|
Java 测试技术
Java SpringBoot Test 单元测试中包括多线程时,没跑完就结束了
Java SpringBoot Test 单元测试中包括多线程时,没跑完就结束了
23 0