在做单元测试的时候,有的时候用到的一些类,我们构造起来不是那么容易,比如HttpRequest,或者说某个Service依赖到了某个Dao,想构造service还得先构造dao,这些外部对象构造起来比较麻烦。 所以出现了Mock! 我们可以用 Mock 工具来模拟这些外部对象,来完成我们的单元测试。
实现Mock技术的优秀开源框架有很多,下面以Mockito为例,用几个简单例子来介绍Mock工具的基本使用:
@Test public void simpleTest(){ //mock List<String> list = Mockito.mock(List.class); //list.get(0) helloworld //Mock List Mock瀵硅薄 //Mock List //Mock //Mock get(0) Mockito.when(list.get(0)).thenReturn("helloworld"); //list.get(0) helloworld String result = list.get(0); System.out.println(result); //(get(0)) Mockito.verify(list).get(0); Assert.assertEquals("helloworld", result); }
@Test public void testMockMethod() { TestService obj=mock(TestServiceImpl.class); when(obj.hello("z3")).thenReturn("hello l4"); String actual=obj.hello("z3"); assertEquals("hello l4",actual); verify(obj).hello("z3"); //verify(obj,times(1)).hello("z3"); //}
2.验证顺序
@Test public void testMockMethodInOrder() { TestService objOther = Mockito.mock(TestServiceImpl.class); TestService objCn = Mockito.mock(TestServiceImpl.class); Mockito.when(objOther.hello("z3")).thenReturn("hello l4"); Mockito.when(objCn.hello("z3")).thenReturn("hello "); String other = objOther.hello("z3"); // objOther Assert.assertEquals("hello l4", other); String cn = objCn.hello("z3"); // objCn Assert.assertEquals("hello ", cn); InOrder inOrder = Mockito.inOrder(objOther, objCn); // inOrder.verify(objOther).hello("z3"); inOrder.verify(objCn).hello("z3"); }
3.非局部模拟
// When().thenReturn() @Test public void testSkipExpect() { TestService obj = Mockito.mock(TestServiceImpl.class); //helloz3null // Assert.assertEquals(null, obj.hello("z3")); //showshowobjshow obj.show(); Mockito.verify(obj).hello("z3"); Mockito.verify(obj).show(); }
4.局部模拟
//--spy()@Test public void testSpy() { TestService obj = Mockito.spy(new TestServiceImpl()); Mockito.doNothing().when(obj).show(); //show Assert.assertEquals("z3",obj.hello("z3")); obj.show(); Mockito.verify(obj).hello("z3"); Mockito.verify(obj).show(); }
5.陷阱
//@Test public void testSpy2() { TestService obj = Mockito.spy(new TestServiceImpl()); //when thenReturn Mockito.when(obj.hello("z3")).thenReturn("hello l4"); Assert.assertEquals("hello l4",obj.hello("z3")); Mockito.verify(obj).hello("z3"); }
//@Test public void testSpy3() { TestService obj = Mockito.spy(new TestServiceImpl()); Mockito.doReturn("hello l4").when(obj).hello("z3"); Assert.assertEquals("hello l4",obj.hello("z3")); Mockito.verify(obj).hello("z3"); }
引用:https://www.cnblogs.com/xuzekun/p/8044803.html