JUnit介绍
JUnit概述 JUnit是由 Erich Gamma 和 Kent Beck 编写的一个回归测试框架(Regression Testing Framework),供Java开发人员编写单元测试之用。 思考:为什么要进行单元测试?
安装JUnit Java的JUnit可从网上免费下载http://junit.org 将下载的junit.zip解压到你指定的目录 设置环境变量 Variable:CLASSPATH Variable Value: .;Install Path/junit.jar 对于IDE环境,对于需要用到的JUnit的项目增加到lib中,其设置不同的IDE有不同的设置 .
运行JUnit 命令行 有3种类型的命令行执行,它们都可以从终端窗口运行。对于简单的基于文本的执行,可输入: java junit.textui.TestRunner [TestClass] 还可以运行AWT或SWING用户界面 java junit.awtui.TestRunner [TestClass] 或 java junit.swingui.TestRunner [TestClass]
IDE 一般使用标准控件或代码模板,在IDE中运行JUnit测试。例如,Eclipse项目提供菜单选项,允许使用模板为项目中的一个或多个类定义TestCase。NetBeans提供向导工具来自动创建JUnit TestCase等。
Ant任务执行 Ant定义了一个可添加到构建项目的JUnit测试标记。根据使用的格式,您可以运行单个TestCase或执行批运行。JUnit测试在XML标记<junit>中定义,被放在Ant构建文件中。一些示例如下: <junit> <test name=“SimpleTest”> </junit>
编写JUnit测试 创建JUnit测试基本步骤 继承junit.framework.TestCase 创建test<Name>方法来执行需要的测试 在test<Name>方法中,通过调用一个assert<Condition>方法来执行测试 Junit架构建立在junit.framework.Test接口的基础上,在用JUnit执行测试时,总在实现该接口的类上运行测试
JUnit的各种断言1(assert<Condition>) assertEquals ([String message],expected,actual) assertNull([String message], Object o) Or assertNotNull(…..) assertTrue([String message],boolean condition) Or assertFalse(….)
JUnit的各种断言2 assertSame([String message],expected,actual) Or assertNotSame(…..) fail([String message])
测试案例的初始化和清理 在需要初始化测试使用的资源时覆盖setUp() 在运行TestCase后需要清理时覆盖tearDown() 在运行TestCase时,保证只调用setUp()和tearDown()方法一次。
演示 Case1 Money.java MoneyTest.java MTestMain.java 在命令行下进行测试 在Eclipse下进行测试
测试套件(TestSuite) JUnit的一个关键优势是能够使测试自动执行,如果准备用该架构执行回归测试,您必然希望同时运行一批单元测试。为些,Junit提供了junit.framework.TestSuite类,使你可以不必为每个TestCase对象分别调用TestRunner,就能方便地运行若干个单元测试。
如果要运行单个TestCase,则可以调用TestSuite的一个构造函数,将其与测试关联起来: TestSuite suite=new TestSuite(Money.class); 还可以调用addTest或addTestSuite方法将测试与TestSuite关联起来 TestSuite表示一个Test实现器集合,可以引用其他任何Test,甚至可以引用另一个TestSuite对象。最后,只需要将它们与另一个TestSuite关联起来,就能运行项目中的所有TestSuite对象
要运行TestSuite,需要运行TestSuite包含所有Test对象。若要方便地运行TestSuite,只需使用静态方法suite(返回Test实现器)创建一个Test类。 演示 Case2(MTestMain1.java) JUnit3.8.1自带示例(junit)
测试设计的指导原则 JUnit用于支持测试驱动的开发。该过程的基本理念是:开发测试然后构建满足测试要求的代码。TDD(测试驱动开发)建议执行下列步骤: 设计代码特性的测试 运行测试,检验其失败 修改代码,尽量减少保证测试成功需要的工作 再次运行测试,确保其成功
在编写JUnit测试时,有些人喜欢在单个方法中执行太多的测试。这样做存在以下缺点: 如果一个方法中编写的内容过多,代码将更难维护 如果一个方法中测试的内容过多,将难以隔离测试故障源 如果测试过多,则存在将测试故障“隐藏”到其他故障的风险 如果测试过于复杂,出现故障的机率将增大
JUnit建议先在代码中进行特定测试,然后将这些测试集中到TestSuite中,以提供类或组件稳定性的基准检查。最后,可逐步建立一个更复杂的集成测试。建议在方法中执行单检查测试。