• spring结合mockito


    转载:https://blog.csdn.net/apexlj/article/details/50298029

    mockito可模拟依赖对象的行为,从而简化跨类的测试。

    maven获取mockito:

    <dependency>
        <groupId>org.mockito</groupId>
        <artifactId>mockito-all</artifactId>
        <version>1.10.19</version>
    </dependency>

    以下例:

    1. 被测类:ConnInfoService
    2. 依赖类:ConnInfoAccessor
    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration(locations = "/conf/test-context.xml")
    public class ConnInfoServiceTest {
    
    
        @Autowired
        @InjectMocks
        private ConnInfoService connInfoService;
    
        @Mock
        private ConnInfoAccessor connInfoAccessor;
    
        @Before
        public void before() throws Exception {
            MockitoAnnotations.initMocks(this);
        }
    
        /**
         * Method: getConnInfo(String connId)
         */
        @Test
        public void testGetConnInfo() throws Exception {
            GPSConnInfo gpsConnInfo = new GPSConnInfo();
            gpsConnInfo.setAppKey("appKey");
            gpsConnInfo.setGpsNodeId("node1");
            when(connInfoAccessor.getConnInfo("connId")).thenReturn(gpsConnInfo);
            Assert.assertEquals(gpsConnInfo, connInfoService.getConnInfo("connId"));
        }
    
        /**
         * Method: saveConnInfo(String connId, GPSConnInfo gpsConnInfo)
         */
        @Test(expected = GPSServiceException.class)
        public void testSaveConnInfo() throws Exception {
            GPSConnInfo gpsConnInfo = new GPSConnInfo();
            gpsConnInfo.setAppKey("appKey");
            gpsConnInfo.setGpsNodeId("node1");
            doThrow(new DataAccessException("e") {
                @Override
                public String getMessage() {
                    return super.getMessage();
                }
            }).when(connInfoAccessor).saveConnInfo("connId", gpsConnInfo);
            connInfoService.saveConnInfo("connId", gpsConnInfo);
        }
      1. @InjectMocks用于标识被测对象,从而把由@mock表示的依赖对象自动注入到被测对象中
      2. @Mock用于表示依赖对象
      3. MockitoAnnotations.initMocks(this);用于初始化以上注入动作
      4. when(connInfoAccessor.getConnInfo("connId")).thenReturn(gpsConnInfo)用于模拟带返回值的getConnInfo方法的处理
      5. doThrow(new DataAccessException("e") { 
        @Override 
        public String getMessage() { 
        return super.getMessage(); 

        }).when(connInfoAccessor).saveConnInfo("connId", gpsConnInfo);
        用于模拟无返回值的saveConnInfo方法抛出异常的行为
  • 相关阅读:
    三款主流静态源代码安全检测工具比较
    原生JS封装ajax以及request
    vue生命周期
    微信 jssdk 逻辑在 vue 中的运用
    JS数组中的indexOf方法
    React和Vue中,是如何监听变量变化的
    Vue2学习小记-给Vue2路由导航钩子和axios拦截器做个封装
    VUE使用中踩过的坑
    Vue系列(一):简介、起步、常用指令、事件和属性、模板、过滤器
    Vue系列(二):发送Ajax、JSONP请求、Vue生命周期及实例属性和方法、自定义指令与过渡
  • 原文地址:https://www.cnblogs.com/ceshi2016/p/9546571.html
Copyright © 2020-2023  润新知