Mockito

2021-11-08  本文已影响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

上一篇下一篇

猜你喜欢

热点阅读