Test a little ,code a little ,实战junit
Notyy的junit教程(一)
有了junit,java程序的单元测试变成非常简单的事。而在写代码前先写测试这个似乎不可思议的规定也变的十分合理而且能有效的帮助程序的设计。
下面是一个aclearcase/" target="_blank" >ccountbean的例子,假设我们要实现一个帐户管理程序,能够向帐户中增加、减少金额,还能在帐户间转帐。很显然需要有一个account类,且慢写代码!在写代码前先写测试,测试如何写?假设你已经有这个account类,你希望如何使用它?显然首先要初始化它,一个帐户应该知道他的拥有者,和他现有的金额,那么他应该有个构建器形如:
account(String Owner,double Balance);那先写测试这个构建器的代码,如下:
package account;
import junit.framework.TestCase;
public class AccountTest extends TestCase {
private Account AccountA;
private Account AccountB;
public AccountTest(String name) {
super(name);
}
public static void main(String args[]) {
junit.textui.TestRunner.run(AccountTest.class);
}
public void testAccount(){
AccountA=new Account("notyy",100);
AccountB=new Account("bricks",200);
assertEquals("notyy",AccountA.Owner);
assertEquals(100,AccountA.Balance,2);
assertEquals("bricks",AccountB.Owner);
assertEquals(200,AccountB.Balance,2);
}
}这段代码无法编译,因为没有account类,我们来为account类写个骨架,使他能够编译。代码如下:
package account;
public class Account {
private String Owner;
private double Balance;
public Account(String aOwner,double aBalance) {
}
}
编译后,写个批命令来运行测试程序,如下:
test.bat
java -cp %classpath%;d:javaprjaccountclasses account.AccountTest
别忘了把junit.jar包含在你的classpath里,junit的配置这里不再多说。
运行test.bat得到如下结果
FAILURES!!!
Test Results:
Run:1 Failure :1 Errors:0
There was 1 failure
1) testAccount(account.AccountTest) “expected . but was ”
感觉如何,测试程序得出了我们预料的结果,因为构建器还没有实现呢!
现在我们来实现构建器
public Account(String aOwner,double aBalance) {
Owner=aOwner;
Balance=aBalance;
}