Mockito

作者: 这家伙很酷 | 来源:发表于2021-11-08 20:52 被阅读0次

    Mockito

    Mock 最大的功能是帮你把单元测试的耦合分解开,如果你的代码对另一个类或者接口有依赖,它能够帮你模拟这些依赖,并帮你验证所调用的依赖的行为。

    比如一段代码有这样的依赖:

    当我们需要测试A类的时候,如果没有 Mock,则我们需要把整个依赖树都构建出来,而使用 Mock 的话就可以将结构分解开,像下面这样:

    Mock 对象使用范畴

    真实对象具有不可确定的行为,产生不可预测的效果(如:股票行情,天气预报) :

    真实对象很难被创建的

    真实对象的某些行为很难被触发

    真实对象实际上还不存在的(和其他开发小组或者和新的硬件打交道)等等

    使用 Mock 对象测试的关键步骤

    使用一个接口来描述这个对象

    在产品代码中实现这个接口

    在测试代码中实现这个接口

    在被测试代码中只是通过接口来引用对象,所以它不知道这个引用的对象是真实对象,还是 Mock 对象。

    Mock 与 Stub 的区别

    Mock 不是 Stub,两者是有区别的:

    前者被称为 mockist TDD,而后者一般称为 classic TDD ;

    前者是基于行为的验证(behavior verification),后者是基于状态的验证 (state verification);

    前者使用的是模拟的对象,而后者使用的是真实的对象。

    依赖  

    <!-- https://mvnrepository.com/artifact/org.mockito/mockito-core -->

            <dependency>

                <groupId>org.mockito</groupId>

                <artifactId>mockito-core</artifactId>

                <version>3.3.3</version>

                <scope>test</scope>

            </dependency>

    通过Mockito可以将未实现的代码进行模拟

     @Test

        void test2()

        {

            User myu=new User();

            myu.setId(10);

            myu.setUsername("cloud1");

            UserService myus=mock(UserService.class);

            when(myus.queryById(1)).thenReturn(myu);

            System.out.println(myus.queryById(1).getUsername());

        }

    使用anyInt()可以匹配任何整形数据

     @Test

        void test3()

        {

            User myu=new User();

            myu.setId(10);

            myu.setUsername("cloud1");

            UserService myus=mock(UserService.class);

            when(myus.queryById(anyInt())).thenReturn(myu);

            System.out.println(myus.queryById(5).getUsername());

        }

    使用Verify断言,在Mockito中可以直接使用断言,而不是Junit的Assertion

     @Test

        void test3()

        {

            User myu=new User();

            myu.setId(10);

            myu.setUsername("cloud1");

            UserService myus=mock(UserService.class);

            when(myus.queryById(anyInt())).thenReturn(myu);

            System.out.println(myus.queryById(5).getUsername());

            verify(myus).queryById(5);a

        }

    关于更多Verify可以访问

    https://www.jianshu.com/p/0e6a868b9da0

    关于Mockito

    https://www.jianshu.com/p/88403716c5c2

    https://www.cnblogs.com/bodhitree/p/9456515.html

    相关文章

      网友评论

          本文标题:Mockito

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