SpringBoot Mock单元测试

Spring Boot Mock

所谓的mock就是创建一个类的虚假的对象,在测试环境中,用来替换掉真实的对象,以达到两大目的:

  • 验证这个对象的某些方法的调用情况,调用了多少次,参数是什么等等
  • 指定这个对象的某些方法的行为,返回特定的值,或者是执行特定的动作

环境

jdk11、junit5

Mock有返回值

@SpringBootTest
class MockTest {

    @Mock
    private TestDao dao;
    @InjectMocks
    private TestService service;

    @Test
    void tt() {
        Mockito.when(dao.sout()) //需Mock方法
                .thenReturn("aa"); //期望返回值

        String sout = service.sout();
        Assertions.assertNotNull(sout);
    }

    @Service
    public static class TestService {

        @Resource
        private TestDao testDao;

        public String sout() {
            System.out.println("service");
            return testDao.sout();
        }
    }

    @Component
    public static class TestDao {
        public String sout() {
            System.out.println("dao");
            return "ok";
        }
    }

}

Mock无返回值

@SpringBootTest
class MockStaticTest {

    @Mock
    private TestDao dao;
    @InjectMocks
    private TestService service;

    @Test
    void tt() {
        Mockito.doAnswer(a->null).when(dao) //执行方法
                .sout(Mockito.anyInt()); //期望返回值

        String sout = service.sout(1);
        Assertions.assertNotNull(sout);
    }

    @Service
    public static class TestService {

        @Resource
        private TestDao testDao;

        public String sout(Integer id) {
            System.out.println("service -> " + id);
            testDao.sout(id);
            return "ok";
        }
    }

    @Component
    public static class TestDao {
        public void sout(Integer id) {
            System.out.println("dao -> " + id);
        }
    }

}

你可能感兴趣的:(java)