Mockito 进行Mock单元测试入门
个人理解:
单元测试:对程序中最小的运行单元就行测试,java中通常是一个类
Mock的作用是在JUnit的基础上,对于依赖进行模拟,人为的将集成测试封闭成黑盒的单元测试。
其他的具体用发和概念可以自行google,网上已经有很多解释,这里只给像我这样刚刚入门,第一次写单元测试的人做一个引导。
这里主要讲一下Mockito中 when(...).thenReturn(...) 的使用时机:
在单元测试的方法中,但有需要依赖于服务A的方法B的返回的时候,需要@Mock出服务A,然后用when模拟出调用的返回值
依赖的服务A:
public class A { public Map<String, String> B() { return new HashMap<>(); } }
需要进行单元测试的类MockUnit:
public class MockUnit { @Resource private A a; public String mockUnitMethod(String s) { Map<String, String> m = a.B(); //.. some logic code if (m.containsKey("key")) { return "value"; } return "not found"; } }
具体单元测试代码:
public class MockUnitTest { @InjectMockes private MockUnit mockUnit; @Mock private A a; private Map<String, String> map; private Map<String, String> map2; @Before public void init() { MockitoAnnotations.initMocks(this); map = new HashMap<>(); map.put("key", "value"); map2 = new HashMap<>(); map2.put("key2", "value2"); } public void testMockUnitMethod() { when(a.B()).thenReturn(map).thenReturn(map2); // 因为在测试MockUnit这个方法的时候,内部会调用A的方法,也就是依赖A, // 所以这个时候应该在上面用注解Mock出A,然后用when()的方式,模拟出依赖的方法的返回值 assertTrue(mockUnit.mockUnitMethod(anyString()).equals("value")); // 第一次A返回map assertTrue(mockUnit.mockUnitMethod(anyString()).equals("value")); // 第二次A返回map2 } }
其他的方法和概念可以自行理解~~~