JUnit和单元测试入门简介

发表于:2008-5-07 16:11

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

 作者:未知    来源:网络转载

3.6、JUnit一个实例

在控制台中简单的范例如下:
1、写个待测试的Triangle类,创建一个TestCase的子类ExampleTest:
2、 ExampleTest中写一个或多个测试方法,断言期望的结果(注意:以test作为待测试的方法的开头,这样这些方法可以被自动找到并被测试)
3、 ExampleTest中写一个suite()方法,它会使用反射动态的创建一个包含所有的testXxxx方法的测试套件:

 


Junit本身的操作并没有什么特别的地方。这里提供了6种测试项目,分别针对不同的测试对象或者可以说是目标。
test case:这个是最常用的,也就是对程序代码中类的测试。
test suite:这个更高一级,可以一次行测试多个类。其效果与分别 进行多个testcase是相同的。
jdbc fixture:这个是针对数据库链接的测试。(很少用,不大懂。)我学的是默认的jdbc的数据库。
jndi fixture:这个相当于是一个容器测试。如果说主要的内容就是测试那些存放链接的fixture。
在编程的时候,经常把一些常用的链接放在一个类似于容器的东东里面,这样,如果调用重复调用链接的话,可以同一调用容器地址,再具体指向里面的链接。这是否是一种管理呢。^_^
comparision fixture:这个也是比较少用的东东。
custom fixture:这个是自定义设置。只是生成一个框架。

 

junitx.framework包主要功能
该包以类方法的方式扩展junit.framework.Assert的功能。

也就是这时候,可以不用继承相应的类,可以直接使用断言的相关的功能。事实上基于元数据的测试框架都基本采用这种方式实现断言。

junitx.framework.Assert
junitx.framework.ArrayAssert

junitx.framework.ComparableAssert
junitx.framework.FileAssert
junitx.framework.ListAssert
junitx.framework.ObjectAssert
junitx.framework.NamingAssert
junitx.framework.OrderedTestSuite
junitx.framework.StringAssert
junitx.framework.ThrowableAssert
2. 测试类的私有属性
2.1 测试类的私有属性的实现
使用相关类(junitx.util.PrivateAccessor)的方法类访问私有属性和方法。

参考:

ExampleJUnit_Addons_Exampleexample1目录下

example1.TestAccount类

example1.Account类

2.2 实现访问类的属性和方法的原理
利用Java的反射机制来实现的。

l 使用java.lang.Class的相关方法,获得相关指定对象的Field,然后调用

field.setAccessible(true);绕过访问权限的检查,然后可以访问Field的值,当然

也可以设置Field的值。

l 使用java.lang.Class的相关方法,获得相关指定对象的Method;然后调用

field.setAccessible(true);绕过访问权限的检查;最后执行该方法.

3. junitx.extensions包主要功能
这个包实际上在使用模板方法模式创建测试用例工具类。

使用了模板方法模式,定义抽象类,把相关的测试方法给出具体实现,把被测试对象的创建放到基本方法中。

JUnit-addons框架自己的例子有:

junitx.extensions.ComparabilityTestCase
junitx.extensions.EqualsHashCodeTestCase
    junitx.extensions.SerializabilityTestCase
这几个类都定义了几个抽象方法,这些方法主要是用于创建对象的方法,需要在具体类里面实现这些方法。在TestSuite里面,增加测试用例是通过,使用类的无参数构造器来实现的,因此上面的这些类,为了实现测试对象的注入,采用了set注入的方式,而不是构造器注入方式。

参考例子:ExampleJUnit_Addons_Exampleexample1srcextensions目录下extensions.WdzEqualsHashCodeTestCase类

其实,根据IOC的原理,可以把上面几个类的类结构修改下,可以考虑采用构造注入的方式,更好些,不用去定义一些具体类。不过,如果采用构造注入这种方式,需要定义自己的的TestRunner了。

 

22/2<12
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

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

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

沪ICP备05003035号

沪公网安备 31010102002173号