1. 程式人生 > >[單元測試]Java單元測試,基於Mockito的第一次嘗試

[單元測試]Java單元測試,基於Mockito的第一次嘗試

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 } }
 其他的方法和概念可以自行理解~~~