[单元测试]Java单元测试,基于Mockito的第一次尝试

时间:2021-11-04 06:39:50
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 
    }
}

 

 其他的方法和概念可以自行理解~~~