博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
junit测试之第三方组件mock
阅读量:6995 次
发布时间:2019-06-27

本文共 3737 字,大约阅读时间需要 12 分钟。


title: junit测试之第三方组件mock tags:

  • Spring
  • JUnit
  • Stub
  • Mockito
  • 测试 categories: junit date: 2017-05-25 18:18:56

今天某个一直稳定运行的测试挂了,没有开发同学出来认领。

![123215_UJYG_871390.png][]

对应模块的小伙伴询问此处依赖的环境是哪个,可以去调查失败的原因。

好吧,回顾一下关于第三方组件mock的方法。

写junit测试经常碰到的问题如下:

生产环境的组件A在开发环境下不存在,或者存在也很难构建出能走到想要测试分支的代码。

那么通过mock技术可以达到此种目的。

  1. 定义Stub的注解  注意Profile注解对应测试基类的注解
package com.air.tqb.test.base;                 import org.springframework.context.annotation.Primary;        import org.springframework.context.annotation.Profile;        import org.springframework.stereotype.Component;                 import java.lang.annotation.ElementType;        import java.lang.annotation.Retention;        import java.lang.annotation.RetentionPolicy;        import java.lang.annotation.Target;                 /**         * Created by qixiaobo on 2017/3/28.         */        @Component        @Primary        @Target(ElementType.TYPE)        @Retention(RetentionPolicy.RUNTIME)        @Profile("unittest")        public @interface Stub {            String value() default "";        }``` plain2.  定义beanNameGenerator复制代码
package com.air.tqb.test.base;         import org.apache.commons.lang.StringUtils;    import org.springframework.beans.factory.config.BeanDefinition;    import org.springframework.context.annotation.AnnotationBeanNameGenerator;    import org.springframework.util.ClassUtils;         import java.beans.Introspector;    import java.util.Map;    import java.util.Set;         /**     * Created by qixiaobo on 2017/3/28.     */    public class StubAnnotationBeanNameGenerator extends AnnotationBeanNameGenerator {        @Override        protected boolean isStereotypeWithNameValue(String annotationType,                                                    Set
metaAnnotationTypes, Map
attributes) { return super.isStereotypeWithNameValue(annotationType, metaAnnotationTypes, attributes) || isStubWithNameValue(annotationType, attributes); } private boolean isStubWithNameValue(String annotationType, Map
attributes) { boolean isStub = annotationType.equals(Stub.class.getName()); return (isStub && attributes != null && attributes.containsKey("value")); } @Override protected String buildDefaultBeanName(BeanDefinition definition) { String shortClassName = ClassUtils.getShortName(definition.getBeanClassName()); return Introspector.decapitalize(StringUtils.removeEnd(shortClassName, "Stub")); } }复制代码
3.  测试基类上增加ActiveProfiles注解  ```java         /**          * Created by qixiaobo on 16/6/29.          */         @RunWith(SpringJUnit4ClassRunner.class)  //使用junit4进行测试         @ContextConfiguration                 ({"classpath:applicationContext-test.xml"}) //加载配置文件         @ActiveProfiles("unittest")         public abstract class BaseTest extends AbstractTransactionalJUnit4SpringContextTests{
            protected Logger logger = LoggerFactory.getLogger(getClass());         } 复制代码
  1. 在spring配置文件中使用自定义的beanNameGenerator
``` plain5. 自定义需要mock的Stub 复制代码
/**     * Created by qixiaobo on 2017/3/28.     */    @Stub("orderRmiServiceStub")    public class OrderRmiServiceStub implements OrderRmiService {        @Override        public int getStationFinishOrderCount(int i, int i1) {            return 0;        }             @Override        public List
saveOrder(int i, Sorder sorder, List
list) { return null; } }复制代码
 *  此处代码就是在跑测试类中使用到方法,可以根据需要自行修改。*  我们还有更厉害的测试mock必杀技mockito,具体各位可以自行研究[123215_UJYG_871390.png]: https://static.oschina.net/uploads/space/2017/0524/123215_UJYG_871390.png复制代码

转载地址:http://wgbvl.baihongyu.com/

你可能感兴趣的文章
模式与框架
查看>>
Kinect开发学习笔记之(一)Kinect介绍和应用
查看>>
nginx编译配置
查看>>
[LeetCode] 3Sum Closest 最近三数之和
查看>>
如何解决严重拖延症
查看>>
C#操作 iis启用父目录
查看>>
JS正则表达式验证数字非常全
查看>>
Android AES加密算法,现在实际上
查看>>
机器学习中的正则化和范数规则化
查看>>
C#修改文件或文件夹的权限,为指定用户、用户组添加完全控制权限
查看>>
Datazen自定义地图
查看>>
Calculate CRC32 as in STM32 hardware (EWARM v.5.50 and later)
查看>>
Android Sdk 国内镜像下载地址
查看>>
C#学习笔记(八):扩展方法
查看>>
【算法导论】多项式求和
查看>>
DELPHI关闭瑞星监控的源代码
查看>>
poj 2762 Going from u to v or from v to u? (推断它是否是一个薄弱环节图)
查看>>
web网站加速之CDN(Content Delivery Network)技术原理
查看>>
IndexReader已解决的问题
查看>>
servlet其工作原理和例子证明
查看>>