• mockito


    mockito类最常见于java的测试类中,用来mock数据。
    需要了解其最常见的注解:
    @Mock和@InjectMock。

    介绍之前,首先要明确一点:@Mock和@InjectMock这两个注解除了名字和使用方式比较像之外,是在功能上无任何可类比性的完全不同的东西。

    1、@Mock:

    在Mockito中用于创建mock对象,使用方法如下:

    @Mock
    private Context mockedObject;
    
    • 1
    • 2

    上面代码创建了一个名为mockedObject,类型为Context的mock对象,该对象所有的方法被置空!!!,根据测试代码逻辑的需要使用

    2、@InjectMock:

    这是一个注入mock对象的操作,参考如下代码:

    @Mock
    private Context mockedObject;
    
    @InjectMock
    private Res res = new Res();
    
    • 1
    • 2
    • 3
    • 4
    • 5

    这段代码中,@InjectMock下面声明了一个待测试的对象,若该对象有类型为Context的成员变量,@Mock定义的mock对象将会被注入到这个待测试的对象中,既Res的类型为Context的成员被直接赋值为mockedObject。(多用于本地测试的时候,模拟数据库中的查询结果等)
    injectmock可以实现依赖注入!!!


    一般来讲:mock的对象是injectMock的对象中的一个属性!!!且在实际mock的时候,使用when…thenRetrun…的方式来进行mock测试

    public class Student {
        private Grade grade;
    
        public Student(Grade grade) {
            this.grade = grade;
        }
    	
    	//getGrade()方法中调用了grade.getGradeName()方法
        public String getGrade(){
            return "student belong to:" + grade.getGradeName();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    @RunWith(MockitoJUnitRunner.class)
    class StudentTest {
      
        @Mock
        Grade grade;
    
        @InjectMocks
        Student student;
    
        @Test
        void getGrade() {
            when(grade.getGradeName()).thenReturn(" 2 grade ");
            assertEquals("Student belong to: 2 grade",student.getGrade());
    
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    以上面的例子,Grade对象是Student对象中的一个属性,在@Test中,使用了when(grade.xxx).thenRetrun(xxx),来进行打桩,然后在student.getGrade()调用的时候【getGrade()方法中调用了grade.getGradeName()方法】,会取出mock的值。

    其他:

    1. @Mock创建的是全部mock的对象,既在对具体的方法打桩之前,mock对象的所有属性和方法全被置空(0或者null);与之对应的是@Spy这个注解,@Spy可以创建部分mock的对象,部分mock对象的所有成员方法都会按照原方法的逻辑执行,直到被打桩返回某个具体的值。@Mock和@Spy才是两个具有可比性的概念。

    2. Mokcito的mock()方法功能与@Mock相同,只是使用方式和场景不同。同样的,@Spy也对应一个spy()方法。

    3. @Mock和@Spy注解的对象,均可被@InjectMock注入到待处理的对象中。

  • 相关阅读:
    Sitecore XP 10.3(latest) Docker一键部署
    java中的this引用和对象的构造及初始化
    OSCP系列靶场-Esay-Monitoring保姆级
    idea插件推荐——Bito提高编码效率
    创建文件夹
    LeetCode每日一题——522. 最长特殊序列 II
    10大数据恢复软件可以帮助您恢复电脑数据
    js-array数组-slice-splice
    ElasticSearch可视化管理工具cerebro
    解决Tomcat控制台输出信息乱码
  • 原文地址:https://blog.csdn.net/qq_45009980/article/details/127992767