spring boot + mock

spring boot + mock

1.pom依赖

  <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

2.demo

import com.t1.Application;
import com.t1.config.MockT;
import com.t1.dao.UserDao;
import com.t1.entity.User;
import com.t1.service.T1Service;
import com.t1.service.UserService;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mockito;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.util.ReflectionTestUtils;

import java.util.ArrayList;
import java.util.List;

@SpringBootTest(classes = Application.class)
@RunWith(SpringJUnit4ClassRunner.class)
public class MockTestDemo {


    /**
     *  注解@MockBean  用mock的bean替换掉spring管理的bean
     */
    @MockBean
    private UserDao userDao;

    @Autowired
    private UserService userService;

    @MockBean
    private T1Service t1Service;

    @MockBean
    private MockT mockT;


    @Test
    public void t1(){

        List list = new ArrayList<User>();
        User user = new User();
        user.setName("爱丽丝");
        user.setId("1");
        list.add(user);
        // 当调用userDao方法时返回 --》list
        Mockito.when(userDao.findAll()).thenReturn(list);
        List userList = userService.findAll();
        Assert.assertEquals(list, userList);
    }

    @Test
    public void t2(){

        User user = new User();
        user.setName("爱丽丝");
        user.setId("1");
        // mock 无返回值方法
        Mockito.doNothing().when(userDao).saveUser(Mockito.any(User.class));
        userService.saveUser(user);
        Assert.assertTrue(true);
    }

    @Test
    public void t3() throws InterruptedException {

        //此方法可以测试@Async("*")标注的异步方法
        //意思是运行原方法,但是是被mock的所以会忽略@Async("*")注解
        Mockito.doCallRealMethod().when(t1Service).t1();

        for(int i = 0; i <= 10; i++){
            t1Service.t1();
        }
    }

    @Test
    public void t4(){

        Mockito.doCallRealMethod().when(mockT).mockT1(Mockito.anyString());
        // 因为是mock的bean 所以bean里的spring的注解会失效,比如@Value或者@Resource等, 所以需要手动设值
        ReflectionTestUtils.setField(mockT, "tv", "456");
        Assert.assertEquals("123456",mockT.mockT1("123"));
    }
}

发布了43 篇原创文章 · 获赞 6 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_43866295/article/details/93056340
今日推荐