Java 中Mockito和Spring Mock

282 阅读1分钟

前言

开发中自测时,经常需要和其它同学开的接口联调,有时没有接品没有数据,可以mock只关注自己的代码

Mockito

  • return
  • donothing
  • verify
  • answer
  • reset
@RunWith(MockitoJUnitRunner.class)
public class TestMo {

    @Mock
    HashMap<String, String> map;

    @Mock
    User user;

    @Test
    public void testReturn() {
        when(map.get("a")).thenReturn("aa");
        Assert.assertEquals("aa", map.get("a"));
    }

    @Test
    public void testDoNothing() {
        doNothing().when(user).sayHello();
        user.sayHello();
    }

    @Test
    public void testVerify() {
        user.sayHello();
        verify(user).sayHello();
    }

    @Test
    public void testAnswer() {
        when(map.get("a")).thenAnswer(new Answer<String>() {

            @Override
            public String answer(InvocationOnMock invocationOnMock) throws Throwable {
                return "aaa";
            }
        });
        Assert.assertEquals("aaa", map.get("a"));
    }

    @Test
    public void testRest() {
        when(map.get("a")).thenReturn("aa");
        reset(map);
        Assert.assertEquals(null, map.get("a"));
    }

}

class User {
    public void sayHello() {
        System.out.println("hello world");
    }
}

Spring Mock

@RunWith(SpringJUnit4ClassRunner.class)

加载Spring和Junit环境

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = MockApplication.class)
public class TestMock {

    @Autowired
    TestService testService;

    @MockBean
    DemoService demoService;

    @Test
    public void testRun() {
        when(demoService.getCount()).thenReturn(1L);
        testService.testRun();
    }
}

总结

  • spring mock 中重要的是要加载spring的环境,还有mock的注解不一样