[單元測試]Java單元測試,基於Mockito的第一次嘗試
阿新 • • 發佈:2018-12-09
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 } }