文档库 最新最全的文档下载
当前位置:文档库 › junit使用文档

junit使用文档

junit使用文档
junit使用文档

Junit

单例测试(JUnit Test Case)与套件测试(JUnit Test Suite)

在你选择类点击右键选择Junt后,会出现上面的界面,有一个Junit Test Case与Junit Test Suite,它两的区别如下:

JUnit Test Case(单个测试,但也可多个方法同时测试)

Eclipse中自带了JUnit,所以我们可以直接进行测试:

1 ,首先在eclipse中建立一个新的工程:

例:Test,然后在Test下建立一个src的同级目录test,该目录最主要的就是存放测试类的地方

2 ,在src中创建类:下面以Money这个类为例进行说明。

Money.class

package com.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;

}

}

3,开始编写测试类:

Junit本身是围绕着两个设计模式来设计的:命令模式和集成模式.

命令模式

利用TestCase定义一个子类,在这个子类中生成一个被测试的对象,编写代码检测某个方法被调用后对象的状态与预期的状态是否一致,进而断言程序代码有没有bug。

当这个子类要测试不只一个方法的实现代码时,可以先建立测试基础,让这些测试在同一个基础上运行,一方面可以减少每个测试的初始化,而且可以测试这些不同方法之间的联系。

单元测试:测试当个的方法

例如,我们要测试Money的Add方法,可以如下:

MoneyTest.class

package com.junit;

import junit.framework.Assert;

import junit.framework.TestCase;

public class MoneyTest extends TestCase { //TestCase的子类public void testAdd() { //把测试代码放在testAdd中

Money m12CHF= new Money(12, "CHF"); //本行和下一行进行一些初始化

Money m14CHF= new Money(14, "CHF");

Money expected= new Money(26, "CHF");//预期的结果

Money result= m12CHF.add(m14CHF); //运行被测试的方法

Assert.assertTrue(expected.equals(result)); //判断运行结果是否与预期的相同

}

}

//如果测试一下equals方法,用类似的代码,如下:

package com.junit;

import junit.framework.Assert;

import junit.framework.TestCase;

public class MoneyTest2 extends TestCase { //TestCase的子类public void testEquals() { //把测试代码放在testEquals中

Money m12CHF= new Money(12, "CHF"); //本行和下一行进行一些初始化 Money m14CHF= new Money(14, "CHF");

Assert.assertTrue(!m12CHF.equals(null));//进行不同情况的测试

Assert.assertEquals(m12CHF, m12CHF);

Assert.assertEquals(m12CHF, new Money(12, "CHF")); // (1)

Assert.assertTrue(!m12CHF.equals(m14CHF));

}

}

集成测试:将多个方法放在一起进行测试

当要同时进行测试Add和equals方法时,可以将它们的各自的初始化工作,合并到一起进行,形成测试基础,用setUp初始化,用tearDown清除。如下:

package com.junit;

import junit.framework.Assert;

import junit.framework.TestCase;

public class MoneyTest3 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);

Assert.assertEquals(f12CHF, new Money(12, "CHF"));

Assert.assertTrue(!f12CHF.equals(f14CHF));

}

public void testSimpleAdd() {//测试add方法的正确性

Money expected= new Money(26, "CHF");

Money result= f12CHF.add(f14CHF);

Assert.assertTrue(expected.equals(result));

}

}

命令模式与集成模式的本质区别是,前者一次只运行一个测试,后者可以将多个测试单例进行测试

集成模式

利用TestSuite可以将一个TestCase子类中所有test***()方法包含进来一起运行,还可将TestSuite子类也包含进来,从而行成了一种等级关系。可以把TestSuite视为一个容器,可以盛放TestCase中的test***()方法,它自己也可以嵌套。这种体系架构,非常类似于现实中程序一步步开发一步步集成的现况。

JUnit Test Suite(测试套件:将多个单元测试类集中一起进行测试)

例如:我现在有MoneyTest 和MoneyTest 2,MoneyTest 3 我要将两个测试类通过测试套件进行测试通过

AllTests.class进行套件测试

package com.junit;

import junit.framework.Test;

import junit.framework.TestSuite;

public class AllTests

{

public static Test suite()

{

TestSuite suite = new TestSuite("Test for com.junit");

suite.addTestSuite(MoneyTest3.class);

suite.addTestSuite(MoneyTest2.class);

suite.addTestSuite(MoneyTest.class);

return suite;

}

}

OK,右击 Run AS 选择junit运行,这样一个测试驱动套件就完成了:

Junit3 与junit4的区别

1.先写个简单的测试类:

package com.junit;

public class BaseClass{

public String method(){

return this.getClass().getName();

}

}

相关文档