junit用法 2010-02-06 19:28:02
<!--showHead end-->
标签:
junit
<!--正文 begin-->
(1)
测试对于保证软件开发质量有着非常重要的作用,单元测试更是必不可少,JUnit是一个非常强大的单元测试包,可以对一个/多个类的单个/多个方法测试,还可以将不同的TestCase组合成TestSuit,使测试任务自动化。Eclipse同样集成了JUnit,可以非常方便地编写TestCase。
测试对于保证软件开发质量有着非常重要的作用,单元测试更是必不可少,JUnit是一个非常强大的单元测试包,可以对一个/多个类的单个/多个方法测试,还可以将不同的TestCase组合成TestSuit,使测试任务自动化。Eclipse同样集成了JUnit,可以非常方便地编写TestCase。
(2)
在eclipse中创建的实例:
创建一个Java工程及包:com.mc.junit-->将junit-4.4.jar包导入到当前的项目中;
在eclipse中创建的实例:
创建一个Java工程及包:com.mc.junit-->将junit-4.4.jar包导入到当前的项目中;
创建一个计算类:
public class Calcuator {
public int add(int n1, int n2) {
return n1 + n2;
}
public int sub(int n1, int n2) {
return n1 - n2;
}
}
public class Calcuator {
public int add(int n1, int n2) {
return n1 + n2;
}
public int sub(int n1, int n2) {
return n1 - n2;
}
}
创建测试用例:
选中Calcuator.java,右键点击,选择New->JUnit Test Case:(具体请见下图)
选中Calcuator.java,右键点击,选择New->JUnit Test Case:(具体请见下图)
说明:
由于eclipse中对junit3及junit4的处理不一样:即在创建用例类时,须选择相应的junit版本。
eclipse创建junit3及junit4的区别:
eclipse创建junit3:
继承TestCase,且setUp()中须实现super.setUp();tearDown()中须实现super.tearDown();
eclipse创建junit4:
不用继承TestCase,且setUp(),tearDown()中不须实现super方法;而是采用注解方式。
若创建用例为junit4版本,则这些用例不能添加到TestSuite中。
由于eclipse中对junit3及junit4的处理不一样:即在创建用例类时,须选择相应的junit版本。
eclipse创建junit3及junit4的区别:
eclipse创建junit3:
继承TestCase,且setUp()中须实现super.setUp();tearDown()中须实现super.tearDown();
eclipse创建junit4:
不用继承TestCase,且setUp(),tearDown()中不须实现super方法;而是采用注解方式。
若创建用例为junit4版本,则这些用例不能添加到TestSuite中。
附:
Junti测试其实采用的是断言的方式,只要我们在所有test开头中的方法对数据添加断言方法.
常用断言方法:
assertEquals("失败提示信息","测试数据","期望数据");
当两值相等时,为正常,否则报错.
assertNotNull("失败提示信息","测试数据");
常用断言方法:
assertEquals("失败提示信息","测试数据","期望数据");
当两值相等时,为正常,否则报错.
assertNotNull("失败提示信息","测试数据");
断言获取数据不为null,否则提示错误.
assertNull("失败提示信息","测试数据");
断言获取数据是为null,否则提示错误
assertTrue("失败提示信息",测试数据blooean值);
assertTrue("失败提示信息",测试数据blooean值);
断言获取数据是否为ture,否则提示错误
同理,还有assertFalse().
创建一个junit3测试用例类--只测试add方法:
public class CalcuatorTest extends TestCase {
private Calcuator calcuator;
protected void setUp() throws Exception {
super.setUp();
calcuator=new Calcuator();
System.out.println("new a calcuator in setup()...");
}
protected void tearDown() throws Exception {
super.tearDown();
System.out.println("run after the textXXX()...");
}
public void testAdd() {
assertEquals(calcuator.add(11, 10), 21);
}
}
创建另一个junit3测试用例类:
public class CalcuatorTest2 extends TestCase {
private Calcuator calcuator;
public class CalcuatorTest2 extends TestCase {
private Calcuator calcuator;
protected void setUp() throws Exception {
super.setUp();
calcuator=new Calcuator();
System.out.println("new a calcuator in setup()...");
}
protected void tearDown() throws Exception {
super.tearDown();
System.out.println("run after the textXXX()...");
}
public void testAdd() {
assertEquals(calcuator.add(1, 10), 11);
}
public void testSub() {
assertEquals(calcuator.sub(10, 4), 6);
}
}
super.setUp();
calcuator=new Calcuator();
System.out.println("new a calcuator in setup()...");
}
protected void tearDown() throws Exception {
super.tearDown();
System.out.println("run after the textXXX()...");
}
public void testAdd() {
assertEquals(calcuator.add(1, 10), 11);
}
public void testSub() {
assertEquals(calcuator.sub(10, 4), 6);
}
}
创建一个junit4测试用例类--注解方式:
import static org.junit.Assert.*;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.*;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
public class CalcuatorTest3 {
private Calcuator calcuator;
@Before //若将其注消,则执行出错
public void setUp() throws Exception {
calcuator=new Calcuator();
System.out.println("new a calcuator in setup()...");
}
@After
public void tearDown() throws Exception {
System.out.println("run after the textXXX()...");
}
@Test
public void testAdd() {
assertEquals(calcuator.add(20, 10), 30);
}
@Test
public void testSub() {
assertEquals(calcuator.sub(4, 10), -6);
}
}
private Calcuator calcuator;
@Before //若将其注消,则执行出错
public void setUp() throws Exception {
calcuator=new Calcuator();
System.out.println("new a calcuator in setup()...");
}
@After
public void tearDown() throws Exception {
System.out.println("run after the textXXX()...");
}
@Test
public void testAdd() {
assertEquals(calcuator.add(20, 10), 30);
}
@Test
public void testSub() {
assertEquals(calcuator.sub(4, 10), -6);
}
}
创建一个testsuit:
对一个/多个类的单个/多个方法测试,还可以将不同的TestCase组合成TestSuit,实现自动全部测试.
选中Calcuator.java,右键点击,选择New->JUnit Test Suit:(具体请见下图)
对一个/多个类的单个/多个方法测试,还可以将不同的TestCase组合成TestSuit,实现自动全部测试.
选中Calcuator.java,右键点击,选择New->JUnit Test Suit:(具体请见下图)
public class AllTests {
public static Test suite() {
TestSuite suite = new TestSuite("Test for com.dmmc.junit");
suite.addTestSuite(CalcuatorTest.class);
suite.addTestSuite(CalcuatorTest2.class);
return suite;
}
}
public static Test suite() {
TestSuite suite = new TestSuite("Test for com.dmmc.junit");
suite.addTestSuite(CalcuatorTest.class);
suite.addTestSuite(CalcuatorTest2.class);
return suite;
}
}
运行:
选择各个用例或testsuit-->右键Run->Run As->JUnit Test,就可以看到JUnit测试结果.
绿色表示测试通过,只要有1个测试未通过,就会显示红色并列出未通过测试的方法。
![](https://i-blog.csdnimg.cn/blog_migrate/1767345b6cc867c058d30199299335b3.jpeg)
说明:
1.如果没有JUnit面板,选择Window->Show View->Other,打开JUnit的View:
2.
setUp与tearDown,这两个函数是junit framework中提供初始化和反初始化每个测试方法的。setUp在每个测试方法调用前被调用,负责初始化测试方法所需要的测试环境;tearDown在每个测试方法被调用之后被调用,负责撤销测试环境。它们与测试方法的关系可以描述如下:
测试开始 -> 循环每一个测试方式( setUp -> testXXXX -> tearDown ) ->测试结束
3.
区分fail、exception。
fail:
期望出现的错误。产生原因:assert函数出错,如assertFalse(true);fail函数产生,如fail(……)。
exception:
不期望出现的错误,属于unit test程序运行时抛出的异常。它和普通代码运行过程中抛出的runtime异常属于一种类型。
1.如果没有JUnit面板,选择Window->Show View->Other,打开JUnit的View:
2.
setUp与tearDown,这两个函数是junit framework中提供初始化和反初始化每个测试方法的。setUp在每个测试方法调用前被调用,负责初始化测试方法所需要的测试环境;tearDown在每个测试方法被调用之后被调用,负责撤销测试环境。它们与测试方法的关系可以描述如下:
测试开始 -> 循环每一个测试方式( setUp -> testXXXX -> tearDown ) ->测试结束
3.
区分fail、exception。
fail:
期望出现的错误。产生原因:assert函数出错,如assertFalse(true);fail函数产生,如fail(……)。
exception:
不期望出现的错误,属于unit test程序运行时抛出的异常。它和普通代码运行过程中抛出的runtime异常属于一种类型。
(3)
ant运行junit
<project name="autobuildtest" default="test">
<target name="setProperties">
<property name="src.dir" value="src"/>
<property name="classes.dir" value="classes"/>
</target>
<target name="setProperties">
<property name="src.dir" value="src"/>
<property name="classes.dir" value="classes"/>
</target>
<target name="prepareDir" depends="setProperties">
<delete dir="${classes.dir}"/>
<mkdir dir="${classes.dir}"/>
</target>
<delete dir="${classes.dir}"/>
<mkdir dir="${classes.dir}"/>
</target>
<target name="compile" depends="prepareDir">
<javac srcdir="./src" destdir="${classes.dir}"/>
</target>
<javac srcdir="./src" destdir="${classes.dir}"/>
</target>
<target name="test" depends="compile">
<junit printsummary="yes">
<formatter type="xml"/>
<test name="ObjectIOManagerTest"/>
<classpath>
<pathelement location="${classes.dir}"/>
</classpath>
</junit>
</target>
<junit printsummary="yes">
<formatter type="xml"/>
<test name="ObjectIOManagerTest"/>
<classpath>
<pathelement location="${classes.dir}"/>
</classpath>
</junit>
</target>
<target name="report" depends="test">
<junitreport todir="${report.dir}">
<fileset dir="${report.dir}">
<include name="TEST-*.xml"/>
</fileset>
<report format="frames" todir="${report.dir}/html"/>
</junitreport>
</target>
<junitreport todir="${report.dir}">
<fileset dir="${report.dir}">
<include name="TEST-*.xml"/>
</fileset>
<report format="frames" todir="${report.dir}/html"/>
</junitreport>
</target>
</project>
printsummary屬性會將測試的結果簡單的顯示出來,<test>的name屬性是設定要進行測試的案例類別.
<formatter>標籤還可以設定將測試的結果,以XML文件儲存下來.
<junitreport>標籤使用XSLT將XML文件轉換為HTML文件;
<formatter>標籤還可以設定將測試的結果,以XML文件儲存下來.
<junitreport>標籤使用XSLT將XML文件轉換為HTML文件;
- <junit>,定义一个junit task
- <batchtest>,位于<junit>中,运行多个TestCase
- <test>,位于<junit>中,运行单个TestCase
- <formatter>,位于<junit>中,定义一个测试结果输出格式
- <junitreport>,定义一个junitreport task
- <report>,位于<junitreport>中,输出一个junit report
Ant建構與調用JUnit進行測試的訊息如下:
Buildfile: build.xml
setProperties:
prepareDir:
[mkdir] Created dir: D:\temp\classes
[mkdir] Created dir: D:\temp\classes
compile:
[javac] Compiling 3 source files to D:\temp\classes
[javac] Compiling 3 source files to D:\temp\classes
test:
[junit] Running ObjectIOManagerTest
[junit] Tests run: 2, Failures: 0, Errors: 0, Time elapsed: 0.14 sec
[junit] Running ObjectIOManagerTest
[junit] Tests run: 2, Failures: 0, Errors: 0, Time elapsed: 0.14 sec
BUILD SUCCESSFUL
Total time: 7 seconds