- 浏览: 2473147 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (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 1708这里的观点非常值得探讨, 所有的产品代码就像是一项投资, 有些 ... -
使用Guava Supplier Mock Datetime
2012-02-04 23:35 2806通过下面的例子了解Guava Supplier的用法.在做单元 ... -
对多线程进行测试
2011-07-02 15:31 1418在junit下, 很难对多线程的代码进行测试, 因此需要借助其 ... -
补习一下EasyMock
2010-04-28 09:18 5051最近有时间, 再温习一下easymock相关的东东 http ... -
结合使用Dummy, InjectTo, PartialMock的单元测试
2009-12-24 21:21 1485结合使用Dummy, InjectTo, PartialMoc ... -
使用代码方式运行指定单元测试类及方法
2009-12-17 08:57 1775记一下, 备忘 private void runT ... -
JunitCore
2009-12-15 01:03 0JUnitCore core = new JUnitCore( ... -
修改dbunit的几个bug兼对dbunit进行扩展
2009-12-08 20:51 3198最近在对unitils进行扩展, 主要是数据库这块儿的内容, ... -
让Unitils实现excel下的多数据源支持
2009-12-03 21:02 3955说明:这里的多数据源需要利用spring中配置的多个DataS ... -
unitils中spring module初始化源码解读
2009-12-03 20:32 2659spring module的初始化还算简单, 但是熟悉里面的原 ... -
解决unitils中的dbunit使用spring中定义的多数据源
2009-12-02 20:07 3178最近在研究unitils, dbunit来适应目前的单元测试. ... -
Unitils 学习笔记
2009-11-27 19:44 7796源码部分 EasyMock相关的 有三个注解: Mock ... -
使用classloader自定义测试套件TestSuite
2009-10-21 19:04 2349junit自带了一个suite用来将多个test case放在 ... -
《单元测试之道Java版——使用JUnit》读书笔记
2009-06-09 23:06 3425这个可能是到目前为止 ... -
JunitRunner定制之模仿@Before对属性进行初始化
2009-02-12 21:54 2549在测试的过程中, 会用到一些模拟数据, 希望在每次调用测试方法 ... -
junit4源码浅析
2009-02-05 21:12 7354junit3和junit4是两个非常不同的版本, 不能简单的理 ... -
最近单元测试中写的一个Assert
2009-01-15 22:03 2922该类提供的assert方法主要针对数据库的单元测试中, 使用S ... -
用于生成mock模型对象Setter代码工具类
2009-01-12 10:35 1804最近写的一个工具类, 用来生成mock的javabean对象, ... -
EasyMock最佳实践
2008-12-20 20:43 30136推荐easymock入门贴: 窥探 ... -
JUnit 4新特性笔记
2008-12-11 08:47 2934测试任何可能的错误。 ...
相关推荐
"软件单元测试——JUnit使用" 软件单元测试是软件开发过程中的一种测试方法,它是指对软件中的最小单元进行测试,以确保软件的可靠性和正确性。JUnit是一个流行的Java测试框架,广泛应用于软件单元测试中。 在本...
在Java世界里,Junit是广泛使用的单元测试框架,它为开发者提供了方便、高效的测试工具。本篇文章将深入探讨如何利用Junit进行单元测试,并分享一些最佳实践。 首先,我们需要了解什么是单元测试。单元测试是对软件...
【Junit单元测试完整案例】深入解析 在软件开发中,单元测试是验证代码功能是否正确、独立单元是否按预期工作的关键步骤。Junit作为Java领域最常用的单元测试框架,为开发者提供了简单易用的API来进行测试。本案例...
本实验“自动饮料机Junit测试”旨在帮助学生深入理解和应用单元测试,特别是在Java编程环境下。单元测试是一种针对程序代码最小可测试单元进行验证的方法,通常这个单元是函数或方法。Junit是Java领域广泛使用的单元...
8. **扩展性**:JUnit支持扩展,可以通过编写自己的测试装饰器或监听器来自定义测试行为。 在实际使用中,开发人员通常会结合构建工具如Maven或Gradle,以及IDE如Eclipse、IntelliJ IDEA来运行JUnit测试。这些工具...
junit3 junit4 api,单元测试的利器
为了进一步增强其功能,Eclipse支持安装各种插件,Junit是其中一个非常重要的插件,用于进行单元测试。 Junit是Java编程语言的一个开源测试框架,由Ernst Kuipers和Kent Beck在早期版本的JUnit基础上发展起来的。它...
5. 容器测试:JUnit还支持测试套件(@Suite),可以组合多个测试类或测试方法一起运行,方便进行大规模的测试。 6. 插件与扩展:JUnit具有良好的可扩展性,可以通过JUnit扩展如TestWatcher、Rule等来实现自定义的...
在Eclipse中使用JUnit4进行单元测试是一种常见的Java开发实践,它可以帮助开发者确保代码的正确性和稳定性。单元测试是软件开发中的重要环节,通过编写针对代码各个独立模块的测试用例,可以验证代码功能是否按预期...
此外,JUnit还支持异常测试、参数化测试、假设测试等功能,极大地简化了单元测试的编写过程。 接下来是`hamcrest-core-1.3.jar`,这是一个匹配对象的库,它是JUnit扩展的一个重要部分。Hamcrest提供了一组丰富的...
JUnit 5引入了新的测试引擎和扩展机制,使得测试更加灵活,比如参数化测试、条件测试、异步测试等。 总的来说,掌握JUnit对于Java开发者来说至关重要,它可以帮助我们在编码阶段发现和修复问题,提高代码质量,减少...
ALevin配置环境所需要的基础包——JUnit5.8.2版 适合人群: 对虚拟网络嵌入算法感兴趣的人 能学到什么: 可以帮助大家更快的配置好ALevin运行环境 阅读建议: ALevin作为一个很好的虚拟网络仿真平台,它的开源给我们...
这篇博客主要探讨了如何使用JUnit进行Spring MVC Controller的单元测试。在实际开发中,单元测试可以帮助我们尽早发现潜在的问题,提高软件的可靠性和可维护性。 首先,让我们了解Spring MVC的基本概念。Spring MVC...
单元测试—— Spring 环境下测试,所需要的jar包: spring-test-4.3.29.RELEASE.jar、junit-4.13.1.jar、hamcrest-core-1.3.jar。
JUNIT软件测试软件测试技术JUnit和单元测试入门简介软件测试1、几个相关的概念白盒测试——把测试对象看作一个打开的盒子,程序内部的逻辑结构和其他信息对测试人员是公开的。回归测试——软件或环境的修复或更正后...
junit单元测试实验 JUnit是Java语言中一种流行的单元测试框架,它可以帮助开发者编写稳健、可靠的代码。本文将通过一个经典的案例,讲解如何使用JUnit结合Eclipse进行单元测试。 知识点1:什么是单元测试 单元...
JUnit4单元测试必备入门教程 JUnit4概述 -------- JUnit4是JUnit框架有史以来最大的改进,其主要目标是利用Java5的Annotation特性简化测试用例的编写。Annotation是一种元数据,用于描述数据。在Java中可以用来和...