- JUnit 教程
- JUnit - 首頁
- JUnit - 概述
- JUnit - 環境設定
- JUnit - 測試框架
- JUnit - 基本用法
- JUnit - API
- JUnit - 編寫測試
- JUnit - 使用斷言
- JUnit - 執行過程
- JUnit - 執行測試
- JUnit - 套件測試
- JUnit - 忽略測試
- JUnit - 時間測試
- JUnit - 異常測試
- JUnit - 引數化測試
- JUnit - 與 Ant 整合
- JUnit - 與 Eclipse 整合
- JUnit - 擴充套件
- JUnit 有用資源
- JUnit - 常見問題解答
- JUnit - 快速指南
- JUnit - 有用資源
- JUnit - 討論
JUnit - 擴充套件
以下是 JUnit 擴充套件:
- Cactus
- JWebUnit
- XMLUnit
- MockObject
Cactus
Cactus 是一個簡單的測試框架,用於單元測試伺服器端 Java 程式碼(Servlet、EJB、標籤庫、過濾器)。Cactus 的目的是降低編寫伺服器端程式碼測試的成本。它使用 JUnit 並對其進行擴充套件。Cactus 實現了一種在容器內執行測試的容器內策略。
Cactus 生態系統由多個元件組成:
Cactus 框架是 Cactus 的核心。它是提供 API 來編寫 Cactus 測試的引擎。
Cactus 整合模組是前端和框架,它們提供使用 Cactus 框架的簡便方法(Ant 指令碼、Eclipse 外掛和 Maven 外掛)。
以下程式碼演示瞭如何使用 Cactus。
import org.apache.cactus.*;
import junit.framework.*;
public class TestSampleServlet extends ServletTestCase {
@Test
public void testServlet() {
// Initialize class to test
SampleServlet servlet = new SampleServlet();
// Set a variable in session as the doSomething()
// method that we are testing
session.setAttribute("name", "value");
// Call the method to test, passing an
// HttpServletRequest object (for example)
String result = servlet.doSomething(request);
// Perform verification that test was successful
assertEquals("something", result);
assertEquals("otherValue", session.getAttribute("otherName"));
}
}
JWebUnit
JWebUnit 是一個基於 Java 的 Web 應用程式測試框架。它使用統一的簡單測試介面包裝現有的測試框架(如 HtmlUnit 和 Selenium),以測試 Web 應用程式的正確性。
JWebUnit 提供了一個高階 Java API,用於導航 Web 應用程式,並結合了一組斷言來驗證應用程式的正確性。這包括透過連結導航、表單輸入和提交、表格內容驗證以及其他典型的業務 Web 應用程式功能。
與僅使用 JUnit 或 HtmlUnit 相比,簡單的導航方法和現成的斷言允許更快地建立測試。如果您想從 HtmlUnit 切換到其他外掛(如 Selenium(即將推出)),則無需重寫您的測試。
這是一個示例程式碼。
import junit.framework.TestCase;
import net.sourceforge.jwebunit.WebTester;
public class ExampleWebTestCase extends TestCase {
private WebTester tester;
public ExampleWebTestCase(String name) {
super(name);
tester = new WebTester();
}
//set base url
public void setUp() throws Exception {
getTestContext().setBaseUrl("http://myserver:8080/myapp");
}
// test base info
@Test
public void testInfoPage() {
beginAt("/info.html");
}
}
XMLUnit
XMLUnit 提供單個 JUnit 擴充套件類 XMLTestCase 和一組支援類,允許對以下方面進行斷言:
兩段 XML 之間的差異(透過 Diff 和 DetailedDiff 類)。
XML 片段的有效性(透過 Validator 類)。
使用 XSLT 轉換 XML 片段的結果(透過 Transform 類)。
在 XML 片段上評估 XPath 表示式(透過實現 XpathEngine 介面的類)。
透過 DOM 遍歷公開的 XML 片段中的各個節點(透過 NodeTest 類)。
假設我們有兩段 XML 需要比較並斷言它們相等。我們可以編寫一個簡單的測試類,如下所示:
import org.custommonkey.xmlunit.XMLTestCase;
public class MyXMLTestCase extends XMLTestCase {
// this test method compare two pieces of the XML
@Test
public void testForXMLEquality() throws Exception {
String myControlXML = "<msg><uuid>0x00435A8C</uuid></msg>";
String myTestXML = "<msg><localId>2376</localId></msg>";
assertXMLEqual("Comparing test xml to control xml", myControlXML, myTestXML);
}
}
MockObject
在單元測試中,模擬物件可以模擬複雜、真實的(非模擬)物件的 behavior,因此當在單元測試中包含真實物件不切實際或不可能時,它們非常有用。
使用模擬物件進行測試的常用編碼風格是:
- 建立模擬物件的例項。
- 在模擬物件中設定狀態和期望。
- 使用模擬物件作為引數呼叫領域程式碼。
- 驗證模擬物件的一致性。
下面是使用 Jmock 的 MockObject 示例。
import org.jmock.Mockery;
import org.jmock.Expectations;
class PubTest extends TestCase {
Mockery context = new Mockery();
public void testSubReceivesMessage() {
// set up
final Sub sub = context.mock(Sub.class);
Pub pub = new Pub();
pub.add(sub);
final String message = "message";
// expectations
context.checking(new Expectations() {
oneOf (sub).receive(message);
});
// execute
pub.publish(message);
// verify
context.assertIsSatisfied();
}
}