新聞中心
以下是 JUnit 擴展

- Cactus
- JWebUnit
- XMLUnit
- MockObject
Cactus
Cactus 是一個簡單框架用來測試服務(wù)器端的 Java 代碼(Servlets, EJBs, Tag Libs, Filters)。Cactus 的設(shè)計意圖是用來減小為服務(wù)器端代碼寫測試樣例的成本。它使用 JUnit 并且在此基礎(chǔ)上進行擴展。Cactus 實現(xiàn)了 in-container 的策略,意味著可以在容器內(nèi)部執(zhí)行測試。
Cactus 系統(tǒng)由以下幾個部分組成:
- Cactus Framework(Cactus 框架) 是 Cactus 的核心。它是提供 API 寫 Cactus 測試代碼的引擎。
- Cactus Integration Modules(Cactus 集成模塊) 它是提供使用 Cactus Framework(Ant scripts, Eclipse plugin, Maven plugin)的前端和框架。
這是使用 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 應(yīng)用的測試框架。它以一種統(tǒng)一、簡單測試接口的方式包裝了如 HtmlUnit 和 Selenium 這些已經(jīng)存在的框架來允許你快速地測試 web 應(yīng)用程序的正確性。
JWebUnit 提供了一種高級別的 Java API 用來處理結(jié)合了一系列驗證程序正確性的斷言的 web 應(yīng)用程序。這包括通過鏈接,表單的填寫和提交,表格內(nèi)容的驗證和其他 web 應(yīng)用程序典型的業(yè)務(wù)特征。
這個簡單的導(dǎo)航方法和隨時可用的斷言允許建立更多的快速測試而不是僅僅使用 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 轉(zhuǎn)換一個 XML 文件的結(jié)果(通過使用 Transform 類)
- 對一個 XML 文件 XPath 表達式的評估(通過實現(xiàn) XpathEngine 接口)
- 一個 XML 文件進行 DOM Traversal 后的獨立結(jié)點(通過使用 NodeTest 類)
我們假設(shè)有兩個我們想要比較和斷言它們相同的 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 = "0x00435A8C ";
String myTestXML = "2376 ";
assertXMLEqual("Comparing test xml to control xml",
myControlXML, myTestXML);
}
}MockObject
在一個單元測試中,虛擬對象可以模擬復(fù)雜的,真實的(非虛擬)對象的行為,因此當(dāng)一個真實對象不現(xiàn)實或不可能包含進一個單元測試的時候非常有用。
用虛擬對象進行測試時一般的編程風(fēng)格包括:
- 創(chuàng)建虛擬對象的實例
- 在虛擬對象中設(shè)置狀態(tài)和描述
- 結(jié)合虛擬對象調(diào)用域代碼作為參數(shù)
- 在虛擬對象中驗證一致性
以下是使用 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();
}
} 名稱欄目:創(chuàng)新互聯(lián)JUint教程:JUnit-框架擴展
轉(zhuǎn)載源于:http://fisionsoft.com.cn/article/cocejpc.html


咨詢
建站咨詢
