- 浏览: 2446775 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (574)
- Book (62)
- Architecture (6)
- Java (39)
- Taobao (41)
- Distributed (4)
- Life (72)
- Database (7)
- Spring (16)
- Photography (15)
- Bicycle (41)
- Test (20)
- jBPM (8)
- Business (12)
- Movie (3)
- Ajax (15)
- Code (7)
- Eclipse (96)
- VIM (2)
- Music (6)
- Groovy (10)
- AutoHotKey (3)
- Dorado (10)
- Maven (7)
- Scrum (5)
- English (20)
- Financial (12)
- OSGi (3)
- Other (4)
- Tool (6)
- Browser (1)
- PPT (1)
- Project Management (4)
- Agile (6)
- Nosql (1)
- Search engine (6)
- Shell (2)
- Open Source (4)
- Storm (10)
- Guava (3)
- Baby (1)
- netty (1)
- Algorithm (1)
- Linux (1)
- Python (2)
最新评论
-
roy2011a:
https://github.com/ebottabi/sto ...
storm的序列化问题及与spring的结合方式 -
roy2011a:
能抗能打 写道哥们儿,你好!能共享下那个storm与sprin ...
storm的序列化问题及与spring的结合方式 -
Alick1:
兄弟,你之前是不是在深圳的正阳公司呆过啊?
storm的ack和fail -
liuleixwd:
先点个赞,写的非常好!有个问题请教下,如果我再bolt里不用e ...
storm的ack和fail -
yao-dd:
solr的facet查询
最近对java的annotation和junit的Runner深入学习了一把, 下面是在实际项目中结合二者的一个实战。
应用场景是这样的: 我有一个测试工具类(DataGenerator)用来帮助初始化测试数据和清除测试数据。该工具类需要两个配置文件, 一个是数据源的配置文件, 一个是用来初始化数据的excel数据表, 我希望通过借助java的annotation和自定义Runner来实现这个功能。 于是我写了下面的两个类, 一个是annotation类:
很明显, 该类就是用来获取配置文件信息的。接下来是在junit运行起来之后, 且在执行测试方法之前根据配置文件初始化一些数据, 于是我从JUnit4ClassRunner继承, 写了下面的类:
就这样我就可以借助annotation来完成初始化了, 在需要用到DataGenerator的testcase, 我可以这样写:
就这么简单, 再也不需要写java代码来进行初始化了, 通过配置就可以搞定
小结
如果你有一些特殊的测试工具需要与Junit结合的话, 一般都可以通过定制自己的Junit Runner加入进来.比如这里将DataGenerator与Junit整合, spring也是一个很好的例子, 他就是在junit的Runner中完成了spring的ApplicationContext初始化工作, 而不需要我们手动来处理.
应用场景是这样的: 我有一个测试工具类(DataGenerator)用来帮助初始化测试数据和清除测试数据。该工具类需要两个配置文件, 一个是数据源的配置文件, 一个是用来初始化数据的excel数据表, 我希望通过借助java的annotation和自定义Runner来实现这个功能。 于是我写了下面的两个类, 一个是annotation类:
@Retention(RetentionPolicy.RUNTIME) @Target( { ElementType.TYPE}) public @interface DataGeneratorConfig { /** * jdbc配置文件 * * @return */ String dbConfig() default "db.config"; /** * excel文件列表 * * @return */ String[] excelFiles() ; }
很明显, 该类就是用来获取配置文件信息的。接下来是在junit运行起来之后, 且在执行测试方法之前根据配置文件初始化一些数据, 于是我从JUnit4ClassRunner继承, 写了下面的类:
public class DataGeneratorJUnit4ClassRunner extends JUnit4ClassRunner { public DataGeneratorJUnit4ClassRunner(Class<?> clazz) throws InitializationError { super(clazz); } @Override public void run(RunNotifier notifier) { // 在运行前对DataGenerator进行初始化 initGenerator(); super.run(notifier); } /** * 初始化DataGenerator */ private void initGenerator() { Class<?> clazz = getTestClass().getJavaClass(); while (clazz != null) { DataGeneratorConfig annotation = clazz .getAnnotation(DataGeneratorConfig.class); if (annotation != null) { String dbConfig = annotation.dbConfig(); String[] excelFiles = annotation.excelFiles(); try { DataGenerator.initCache(getAbsoluteExcelPaths(excelFiles), getAbsolutePath(dbConfig)); } catch (Exception e) { throw new RuntimeException("使用注解初始化DataGenerator失败", e); } break; } clazz = clazz.getSuperclass(); } } /** * 取得excel文件绝对路径 * @param excelPaths * @return */ private String[] getAbsoluteExcelPaths(String[] excelPaths) { String[] realPaths = new String[excelPaths.length]; for (int i = 0; i < excelPaths.length; i++) { realPaths[i] = getAbsolutePath(excelPaths[i]); } return realPaths; } /** * 根据文件名取得文件绝对路径 * * @param fileName * @return */ private String getAbsolutePath(String fileName) { return DataGeneratorJUnit4ClassRunner.class.getClassLoader().getResource(fileName) .getFile(); } }
就这样我就可以借助annotation来完成初始化了, 在需要用到DataGenerator的testcase, 我可以这样写:
@RunWith(DataGeneratorJUnit4ClassRunner.class) @DataGeneratorConfig(dbConfig = "config.properties", excelFiles = "xxx/yyy.xls")
就这么简单, 再也不需要写java代码来进行初始化了, 通过配置就可以搞定
小结
如果你有一些特殊的测试工具需要与Junit结合的话, 一般都可以通过定制自己的Junit Runner加入进来.比如这里将DataGenerator与Junit整合, spring也是一个很好的例子, 他就是在junit的Runner中完成了spring的ApplicationContext初始化工作, 而不需要我们手动来处理.
评论
1 楼
davice_li
2013-07-13
DataGenerator.initCache(getAbsoluteExcelPaths(excelFiles),
getAbsolutePath(dbConfig));
DataGenerator 文件在那里?导入工程找不到呢
getAbsolutePath(dbConfig));
DataGenerator 文件在那里?导入工程找不到呢
发表评论
-
Effective Unit Test:代码面前并非人人平等
2012-02-05 15:38 1656这里的观点非常值得探讨, 所有的产品代码就像是一项投资, 有些 ... -
使用Guava Supplier Mock Datetime
2012-02-04 23:35 2752通过下面的例子了解Guava Supplier的用法.在做单元 ... -
对多线程进行测试
2011-07-02 15:31 1367在junit下, 很难对多线程的代码进行测试, 因此需要借助其 ... -
补习一下EasyMock
2010-04-28 09:18 5016最近有时间, 再温习一下easymock相关的东东 http ... -
结合使用Dummy, InjectTo, PartialMock的单元测试
2009-12-24 21:21 1447结合使用Dummy, InjectTo, PartialMoc ... -
使用代码方式运行指定单元测试类及方法
2009-12-17 08:57 1724记一下, 备忘 private void runT ... -
JunitCore
2009-12-15 01:03 0JUnitCore core = new JUnitCore( ... -
修改dbunit的几个bug兼对dbunit进行扩展
2009-12-08 20:51 3167最近在对unitils进行扩展, 主要是数据库这块儿的内容, ... -
让Unitils实现excel下的多数据源支持
2009-12-03 21:02 3910说明:这里的多数据源需要利用spring中配置的多个DataS ... -
unitils中spring module初始化源码解读
2009-12-03 20:32 2624spring module的初始化还算简单, 但是熟悉里面的原 ... -
解决unitils中的dbunit使用spring中定义的多数据源
2009-12-02 20:07 3142最近在研究unitils, dbunit来适应目前的单元测试. ... -
Unitils 学习笔记
2009-11-27 19:44 7733源码部分 EasyMock相关的 有三个注解: Mock ... -
使用classloader自定义测试套件TestSuite
2009-10-21 19:04 2306junit自带了一个suite用来将多个test case放在 ... -
《单元测试之道Java版——使用JUnit》读书笔记
2009-06-09 23:06 3384这个可能是到目前为止 ... -
JunitRunner定制之模仿@Before对属性进行初始化
2009-02-12 21:54 2499在测试的过程中, 会用到一些模拟数据, 希望在每次调用测试方法 ... -
junit4源码浅析
2009-02-05 21:12 7312junit3和junit4是两个非常不同的版本, 不能简单的理 ... -
最近单元测试中写的一个Assert
2009-01-15 22:03 2891该类提供的assert方法主要针对数据库的单元测试中, 使用S ... -
用于生成mock模型对象Setter代码工具类
2009-01-12 10:35 1769最近写的一个工具类, 用来生成mock的javabean对象, ... -
EasyMock最佳实践
2008-12-20 20:43 30038推荐easymock入门贴: 窥探 ... -
JUnit 4新特性笔记
2008-12-11 08:47 2896测试任何可能的错误。 ...
相关推荐
用Eclipse进行软件单元测试,具体步骤和示例。
单元测试之道Java版——使用Junit,不错的学习测试的教材
Junit单元测试Junit单元测试Junit单元测试Junit单元测试
通过单元测试工具(Junit)支持,使学生对单元测试中测试用例的设计原则,设计方法进行了解和掌握。
Junit单元测试Junit单元测试Junit单元测试Junit单元测试
junit3 junit4 api,单元测试的利器
junit单元测试——浅浅笔记
单元测试框架Junit—— JUnit3.8.1 以及使用JUnit测试的代码demo。
junit单元测试junit单元测试junit单元测试
ALevin配置环境所需要的基础包——JUnit5.8.2版 适合人群: 对虚拟网络嵌入算法感兴趣的人 能学到什么: 可以帮助大家更快的配置好ALevin运行环境 阅读建议: ALevin作为一个很好的虚拟网络仿真平台,它的开源给我们...
简单介绍了Junit的安装过程与实例应用。应用的问题是软件测试中的佣兵问题,整个文档中有代码及测试结果,可以更好地帮助学生了解Junit单元测试中的作用。
单元测试—— Spring 环境下测试,所需要的jar包: spring-test-4.3.29.RELEASE.jar、junit-4.13.1.jar、hamcrest-core-1.3.jar。
JUNIT软件测试软件测试技术JUnit和单元测试入门简介软件测试1、几个相关的概念白盒测试——把测试对象看作一个打开的盒子,程序内部的逻辑结构和其他信息对测试人员是公开的。回归测试——软件或环境的修复或更正后...
《单元测试之道Java版:使用JUnit》PDF 下载
在Eclipse中使用JUnit4进行单元测试!
上下文时间软件测试中Junit单元测试实例在一种传统的结构化编程语言中,比如C,要进行测试的单元一般是函数或子过程。在象C++这样的面向对象的语言中,要进行测试的基本单元是类。对Ada语言来说,开发人员可以选择是...
JUnit 在测试驱动的开发方面有很重要的发展,是起源于 JUnit 的一个统称为 xUnit 的单元测试框架之一。 2 单元测试概念 单元:在Java中,一个类就是一个单元 单元测试:程序猿编写的一小段代码,用来对某个类中的...
单元测试工具Junit的简单使用
详细的介绍了junit单元测试的过程,JUnit 是 Java 社区中知名度最高的单元测试工具,本文中所介绍的是最新的JUnit 4单元测试,JUnit 4 使用 Java 5 中的注解(annotation)使测试变得更加简单
Junit 单元测试 包括Spring Struts 两个模块的测试案例。附源码