列表 1. JUnit 常用结构
1. Import junit.framework.TestCase;
2.
3. Public class AddJavaTest extends TestCase {
4.
5. protected void setUp() throws Exception
6. {
7. // create some object
8. }
9. protected void tearDown() throws Exception
10. {
11. //release any recourse that was created in 12. setup()
13. }
14. public AddJavaTest (String name){
15. super (name); [Page]
16.
17. public void testSimpleAddition (){
18. assertTrue (expect == actual);
19. }
}
如 列表 1 第三行所示,所有的 Java 测试用例类都必须扩展junit.framework.TestCase ,它是 JUnit 的核心类。在第五行中,TestCase.setUp() 被重载,从而对测试下的对象进行初始化或者实例化。相反,在第九行中, TestCase.tearDown() 被重载,是释放任何定位资源的。在第十四行中,为了在日志中显示这个测试用例的名称,一个测试用例必须有一个可以将自变量传递到它的父类 (TestCase) 的专门的串参数构造器。
测试用例必须声明为 public void ,并且不带行参。此外,合适的是测试方法名称都有一个 \"test\" 前缀,这样测试运行人员就可以自动地执行所有的方法。最后,在第十八行的断言语句中,决定了这个测试用例的成功与失败。这个方法 assert在这个特殊的测试情景下,将期望值与实际值进行了对比。您可以利用 fail() 方法强迫这个测试用例失败,例如您想要迫使一个操作暂停。JUnit 提供了一个额外的决定测试用例成功或者失败的机制。表格 1 显示了不同 assert 和 fail 方法签名的范例。
表格 1. Assert 方法
static voidassertEquals (boolean expected, boolean actual)
Asserts that two booleans are equal.
static voidassertFalse (boolean condition)
Asserts that a condition is false.
static voidassertNotNull (java.lang.Object object)
Asserts that an object isn’t null.
static voidassertNotSame (java.lang.Object expected, java.lang.Object actual)
Asserts that two objects refer to the same object.
static voidassertNull (java.lang.Object object)
Asserts that an object is null.
static voidassertSame
(java.lang.Object expected, java.lang.Object actual)
Asserts that two objects refer to the same object.
static voidassertTrue (boolean condition)
Asserts that a condition is true.
static voidfail (java.lang.String message)
Fails a test with the given message.
static voidfailNotEquals
(java.lang.String message, java.lang.Object expected, java.lang.Object actual)
private static voidfailNotSame
(java.lang.String message, java.lang.Object expected, java.lang.Object actual)
private static voidfailNotEquals
(java.lang.String message, java.lang.Object expected, java.lang.Object actual)
private static voidfailSame (java.lang.String message)
(package private) static java.lang.Stringformat (java.lang.String message, java.lang.Object expected, java.lang.Object actual) [Page]
注意: Assert 类包含许多不同的重载方法。下面是一个完全重载 Assert 类方法的完整列表,请看页面 JUnit.org(参见 参考资源)。
JUnit 提供了一个 TestRunner 类来执行测试用例。其实测试用例的方法多种多样。测试报告是利用图形和文本来显示的。要获取最受欢迎的图形结果,可以利用 junit.swingui.TestRunner 和 junit.awtgui.TestRunner。其次受欢迎的基于文本的结果,可以 利用 junit.textui.TestRunner 来取代。
此外, JUnit 测试用例可以从 Rational Application Developer 的IDE 运行或者在 Ant 构成脚本中自动运行。
JUnit 还通过利用 junit.framework.TestSuite 类提供了一种将测试归组为测试套件的方法。一个测试套件是由您能够在相同时期运行的相关测试组成的。下面有两种 JUnit 运行测试比较便利的方法:
对于第一种方法,您可以通过使用这个命令将测试用例传递到 TestSuite 构造器:
TestSuite suite= new TestSuite(testAddJava.class) 在这种情况下,TestRunner 将所有带测试前缀的测试程序挑选出来,然后自动运行每一个测试用例。
另一个可选的方法是,通过使用 TestSuite.addTest 方法添加每个测试用例:
TestSuite suite = new TestSuite(); suite.addTest(new AddJavaTest(\"testSimpleAddition\"));
JUnitEE 测试框架
JUnit 提供了一个对客户端 Java 应用软件进行单元测试的有效且简便的方法,但是它仍有一些局限性;因此,在每一个应用软件服务器的容器中进行测试变成了一个冗长且乏味的过程。IBM Rational Application Developer 平台提供的 Web-based Universal Test Client (UTC) 特性为 Enterprise JavaBeans (EJBs) 提供了一个无缝的完整的单元测试机制。然而,Rational Application Developer UTC 是一个交互式的单元测试机制,因此当进行自动单元测试时它显得有些不足。
JUnitEE 测试框架就是解决这些局限性的,同时还处理这个冗长而乏味的过程。这个框架延伸了标准的 JUnit,从而使它能够在应用服务器容器中执行单元测试。它在单元测试软件的 J2EE Web 模块中配置,利用 TestRunner 输出 HTML 或者 XML 测试结果。它还包含一个登陆到 JUnit 测试用例登陆口的 TestServlet。因此,根据 JUnitEE.org 的说法, 将您的测试工具构建为一个标准的 J2EE Web 有以下几点好处: 测试在 J2EE Web 模块中已经打包(以 WAR 文件的形式),这样便于部署和执行。