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

Posted 可爱的波儿胖

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[单元测试]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 
    }
}

 

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

以上是关于[单元测试]Java单元测试,基于Mockito的第一次尝试的主要内容,如果未能解决你的问题,请参考以下文章

Mockito单元测试保姆级实战(一个java Mock测试框架)

Mockito单元测试保姆级实战(一个java Mock测试框架)

android单元测试框架Mockito使用

基于Junit5+PowerMock的单元测试框架

JUnit + Mockito 单元测试

一文让你快速上手 Mockito 单元测试框架