zoukankan      html  css  js  c++  java
  • [单元测试]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 
        }
    }
     其他的方法和概念可以自行理解~~~
  • 相关阅读:
    114自定义UITableViewCell(扩展知识:为UITableViewCell添加动画效果)
    101在检索框中添加一个书签按钮(扩展知识:在检索框中添加一个范围条)
    088实现自动倒计时功能
    086设置日期选择器框的显示样式
    Shell if else
    Shell数组
    Shell字符串
    Shell运算符
    数据挖掘标准流程规范
    Shell转义字符与变量替换
  • 原文地址:https://www.cnblogs.com/TinyBobo/p/9639680.html
Copyright © 2011-2022 走看看