欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

使用Spring+Junit+Mockito做代码自测

程序员文章站 2022-03-08 20:17:22
...

源:https://blog.csdn.net/z199172177/article/details/79731952

评:

重构代码时一套完善的测试工作能给我们莫大的帮助,下面时我使用Mockito做的Demo,目的是替换掉Dubbo 的相关接口。供不熟悉Mockito 的同学做参考。 

 

junit:junit:4.11 

org.springframework:spring-test:3.2.4.RELEASE 

org.mockito:mockito-all:1.10.19 

jdk1.8

 

BaseTest

 import org.junit.Assert;

import org.junit.Before;

import org.junit.Test;

import org.junit.runner.RunWith;

import org.mockito.MockitoAnnotations;

import org.springframework.test.context.ContextConfiguration;

import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

 

@ContextConfiguration(locations = {"classpath:spring/application.xml"})

@RunWith(SpringJUnit4ClassRunner.class)

public class BaseTest {

    @Before

    public void setup() {

        /** 如果同时需要注入和mock注入,SpringJUnit4ClassRunner的前提下,注入mock */

        MockitoAnnotations.initMocks(this);

    }

 

    @Test

    public void test() {

        Assert.assertEquals(1, 1);

    }

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

MockTestDemo

import cn.idongjia.makalu.biz.PostBO;

import cn.idongjia.makalu.domain.post.MakaluUser;

import cn.idongjia.makalu.manager.ClanManager;

import cn.idongjia.makalu.pojo.post.Post;

import cn.idongjia.makalu.repo.PostRepo;

import cn.idongjia.makalu.service.PostService;

import com.google.gson.Gson;

import com.google.gson.GsonBuilder;

import org.junit.Test;

import org.mockito.InjectMocks;

import org.mockito.Mock;

import org.mockito.Mockito;

import org.mockito.Spy;

 

import javax.annotation.Resource;

import java.util.Optional;

 

/*

 * service 被标记了 @InjectMocks , 在 setup 方法中 执行 MockitoAnnotations.initMocks(this); 的时候,会将标记了

 * @Mock或 @Spy 的属性注入到 service 中。

 * 如果是 @Mock, 那就是通常的方式,service里面的provider完全被Mock实例替换,所有的调用都是针对Mock生成类的。

 * 如果是 @Autowired 加 @Spy , 那么对于定制了返回值的会调用 Mock实例,否则会调用真实注入的属性。

 */

public class MockTestDemo extends BaseTest{

 

    @InjectMocks

    @Resource

    PostService postService;

 

    @InjectMocks

    @Spy

    @Resource

    private PostBO postBO;//注入到postService 中

 

    @InjectMocks

    @Spy

    @Resource

    private PostRepo postRepo;//注入到postRepo 中

 

    //Dubbo接口

    @Mock

    private ClanManager clanManager;//注入到postRepo 中

 

    @Test

    public void test() {

        System.out.println("======***************");

        /**

         * 构造一个自己的对象。

         */

        User mu = new User();

        mu.setUsername("zzz");

 

        Optional<User> user = Optional.of(mu);

 

        // 设置模拟对象的返回预期值

        Mockito.when(clanManager.takeUser(21L)).thenReturn(user);

 

        Post post = this.postService.get(5L);

        System.out.println(String.format("使用mock后的结果:%s", post.getUsername()));//修改后的结果值

        System.out.println("======***************");

    }