Need more material about testing Mail me: AncenChen@gmail.com
Junit
的入门
对于
Junit
的优点这里就不一一描述了。觉得最重要的一点是软件代码和测试代码分开;
Junit
是开源产品,可以进行二次开发,所以觉得
Junit
扩展性会比较好吧!
Junit
的安装
Junit
的安装还是很简单的,直接将
Junit3.8.3
放在一个目录下,现在假社这个目录为
D:\Junit3.8.1,
那么我们就在
CLASSPATH
中添加
D:\Junit3.8.1\Junit.jar
这个路径就可以使用了。当然如果你在其他目录那么相应路径就是
:
其他目录:
\ Junit3.8.1\Junit.jar
接下来谈下
Junit
框架的组成,
Junit TC
测试目标与测试方法的集合
TS TestSuite
测试包
TR TestTusult
测试结果的描述
Test Listener
测试实践监听者
Test Failure
测试过程中出现的与预期不一致的地方
AssertionFailedError
测试过程中出现的异常
Junit
的各种断言:
1
,
assertEquals([String message],
expected,
actual)
这是使用得最多的断言形式。
expected
-是你的期望值(通常要硬编码)
actual
-被测代码实际产生的值
message
-可选的消息,如果提供的话,将会在发生错误的时候报告这个消息。
2
,
assertNull([String message],java.lang.Object object)
assertNotNull([String message],java.lang.Object object)
验证一个给定的对象是否为
Null
(或者为非
Null
),如果答案为否,则将会失败。
message
参数是可选的。
3
,
assertSame( [String message],
expected,
actual)
验证
expected
参数和
actual
参数所引用的是否为同
一对象,如果不是的
话,将会失败。
Message
参数是可选的。
4
,
assertTrue( [String message],boolean condition)
验证给定的二元条件是否为真,如果为假的话,将会失败。
Message
参数是可选的。
assertFalse( [String message],boolean condition)
验证给定的二元条件是否为假,如果不为假的话,将会失败。
Message
参数是可选的
5
,
fail( String message )
使测试立即失败,其中
message
参数使可选的。
这种断言通常被用于标记某个不应该到达的分支(例如,在一个预期发生的异常之后)
首先,第一行的
import
声明引入了必须的
junit
类。
定义一个类,从
TestCase
继承下来
定义一个构造函数
测试类中包含名为
test……
的方法
|
Junit
的框架
import junit.framework.*;
public class TestSimple extends TestCase{
punlic TestSimple (String name){
super(name);}
public void testAdd(){
assertEquals(2,1+1);
}
JUnit
中常用的接口和类:
Test
接口
——
运行测试和收集测试结果
TestCase
抽象类
——
定义测试中固定方法
Assert
静态类
——
一系列断言方法的集合
TestSuite
测试包类
——
多个测试的组合
TestResult
结果类和其它类与接口
一些使用
JUnit
经验
:
不要用
TestCase
的构造函数初始化,而要用
setUp()
和
tearDown()
方法。
不要依赖或假定测试运行的顺序,因为
JUnit
利用
Vector
保存测试方法。所以不同的平台会按不同的顺序从
Vector
中取出测试方法。
避免编写有副作用的
TestCase
。例如:如果随后的测试依赖于某些特定的交易数据,就不要提交交易数据。简单的回滚就可以了。
当继承一个测试类时,记得调用父类的
setUp()
和
tearDown()
方法。
将测试代码和工作代码放在一起,一边同步编译和更新。
测试类和测试方法应该有一致的命名方案。如在工作类名前加上
test
从而形成测试类名。
确保测试与时间无关,不要依赖使用过期的数据进行测试。导致在随后的维护过程中很难重现测试。
如果你编写的软件面向国际市场,编写测试时要考虑国际化的因素。不要仅用母语的
Locale
进行测试。
尽可能地利用
JUnit
提供地
assert/fail
方法以及异常处理的方法,可以使代码更为简洁。
测试要尽可能地小,执行速度快
Junit
的扩展:
JUnit + HttpUnit=WEB
功能测试工具
JUnit + hansel =
代码覆盖测试工具
JUnit + abbot =
界面自动回放测试工具
JUnit + dbunit =
数据库测试工具
JUnit + junitperf=
性能测试工具
现在来实践一下吧!
Junit
应用举例:
public class Money {
private int fAmount;//
余额
private String fCurrency;//
货币类型
public Money(int amount, String currency) {
fAmount= amount;
fCurrency= currency;
}
public int amount() {
return fAmount;
}
public String currency() {
return fCurrency;
}
public Money add(Money m) {//
加钱
return new Money(amount()+m.amount(), currency());
}
public boolean equals(Object anObject) {//
判断钱数是否相等
if (anObject instanceof Money) {
Money aMoney= (Money)anObject;
return aMoney.currency().equals(currency())
&& amount() == aMoney.amount();
}
return false;
}
}
测试程序:
import junit.framework.*;
public class MoneyTest extends TestCase {//TestCase
的子类
private Money f12CHF;//
提取公用的对象
private Money f14CHF;
protected void setUp() {//
初始化公用对象
f12CHF= new Money(12, "CHF");
f14CHF= new Money(14, "CHF");
}
public void testEquals() {//
测试
equals
方法的正确性
Assert.assertTrue(!f12CHF.equals(null));
Assert.assertEquals(f12CHF, f12CHF);
&