Unitils框架与模块扩展

发表于:2010-9-20 11:42

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:guangyuan    来源:TaoBao QA Team

  Unitils框架与模块扩展

  Unitils这个Java开源包的目的是让单元测试变得更加容易和维护。Unitils构建在DBUnit与EasyMock项目之上并与JUnit和TestNG相结合,支持数据库测试,支持利用mock对象进行测试并提供与Spring和Hibernate相集成。Unitils设计成以一种高度可配置和松散偶合的框架来添加这些服务到单元测试中,其模块化的管理方式使Unitils更易进行扩展。

  1,JUnit4ClassRunner简介

  所有的测试方法test method都是在Runner下执行的,可以将Runner理解为junit运行的容器,默认情况下junit会使用JUnit4ClassRunner作为所有test method的执行容器。如果要定制自己的junit,则可以实现自己的Runner,最简单的办法就是Junit4ClassRunner继承,spring-test,unitils这些框架就是采用这样的做法。如在spring中是SpringJUnit4ClassRunner,在unitils中是UnitilsJUnit4TestClassRunner。

  JUnit4ClassRunner的构造器如下:

public JUnit4ClassRunner(Class< ?> klass) throws InitializationError {
fTestClass= new TestClass(klass);
fTestMethods= getTestMethods();
validate();
}

  JUnit4ClassRunner没有默认的构造器, 从构造器代码中我们可以看出, 它需要一个参数, 这个参数就是我们当前要运行的测试类test class, Runner拿到了要执行的测试类之后, 就可以进一步拿到需要执行的测试方法, 这些动作是通过注解获得。这个测试的运行是通过runner中的run()方法执行:

@Override
public void run(final RunNotifier notifier) {
new ClassRoadie(notifier, fTestClass, getDescription(), new Runnable() {
public void run() {
runMethods(notifier);
}
}).runProtected();
}

  这个run方法里就会按照junit定义的顺序依次执行被@BeforeClass、@Before、@Test、@After、@AfterClass标记的方法。

  2,UnitilsJUnit4TestClassRunner

  Unitils的runner在继承了Junit4 runner的基础上进一步改写了run()方法来定义自己的执行顺序:

  从图中可以看到,整个Unitils在运行期间,在执行Junit4的@BeforeClass前会执行Unitils的beforeTestClass方法,然后执行被Junit4的@BeforeClass标签标注的方法,再依次执行afterCreateTestObject、beforeTestSetUp、@Before……等方法。

 

31/3123>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号