JUnit - Phần mở rộng
Sau đây là các phần mở rộng JUnit -
- Cactus
- JWebUnit
- XMLUnit
- MockObject
cây xương rồng
Cactus là một khung thử nghiệm đơn giản để kiểm tra đơn vị mã java phía máy chủ (Servlets, EJBs, Tag Libs, Filters). Mục đích của Cactus là giảm chi phí viết thử nghiệm cho mã phía máy chủ. Nó sử dụng JUnit và mở rộng nó. Cactus thực hiện chiến lược trong vùng chứa để thực hiện các bài kiểm tra bên trong vùng chứa.
Hệ sinh thái xương rồng được tạo thành từ một số thành phần:
Cactus Frameworklà trái tim của Xương rồng. Nó là công cụ cung cấp API để viết các bài kiểm tra Cactus.
Cactus Integration Modules là giao diện người dùng và khuôn khổ cung cấp các cách dễ dàng để sử dụng Khung xương rồng (tập lệnh Ant, plugin Eclipse và plugin Maven).
Đoạn mã sau minh họa cách sử dụng 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 là một khung thử nghiệm dựa trên Java cho các ứng dụng web. Nó bao bọc các khuôn khổ thử nghiệm hiện có như HtmlUnit và Selenium bằng một giao diện thử nghiệm đơn giản, thống nhất để kiểm tra tính đúng đắn của các ứng dụng web của bạn.
JWebUnit cung cấp một API Java cấp cao để điều hướng ứng dụng web kết hợp với một tập hợp các xác nhận để xác minh tính đúng đắn của ứng dụng. Điều này bao gồm điều hướng thông qua liên kết, nhập và gửi biểu mẫu, xác nhận nội dung bảng và các tính năng ứng dụng web kinh doanh điển hình khác.
Các phương pháp điều hướng đơn giản và xác nhận sẵn sàng sử dụng cho phép tạo thử nghiệm nhanh hơn so với chỉ sử dụng JUnit hoặc HtmlUnit. Và nếu bạn muốn chuyển từ HtmlUnit sang các plugin khác như Selenium (có sẵn sớm), bạn không cần phải viết lại các bài kiểm tra của mình.
Đây là một mã mẫu.
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 cung cấp một lớp mở rộng JUnit duy nhất, XMLTestCase, và một tập hợp các lớp hỗ trợ cho phép xác nhận về:
Sự khác biệt giữa hai phần XML (thông qua các lớp Diff và Chi tiết).
Tính hợp lệ của một đoạn XML (thông qua lớp Validator).
Kết quả của việc chuyển đổi một đoạn XML bằng XSLT (thông qua lớp Transform).
Việc đánh giá một biểu thức XPath trên một đoạn XML (thông qua các lớp triển khai giao diện XpathEngine).
Các nút riêng lẻ trong một đoạn XML được hiển thị bởi DOM Traversal (thông qua lớp NodeTest).
Giả sử chúng tôi có hai phần XML mà chúng tôi muốn so sánh và khẳng định rằng chúng bằng nhau. Chúng ta có thể viết một lớp kiểm tra đơn giản như thế này -
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
Trong bài kiểm tra đơn vị, các đối tượng giả có thể mô phỏng hành vi của các đối tượng phức tạp, thực (không phải giả) và do đó rất hữu ích khi một đối tượng thực không thực tế hoặc không thể kết hợp vào bài kiểm tra đơn vị.
Phong cách mã hóa phổ biến để thử nghiệm với các đối tượng giả là:
- Tạo các thể hiện của các đối tượng giả.
- Đặt trạng thái và kỳ vọng trong các đối tượng giả.
- Gọi mã miền với các đối tượng giả làm tham số.
- Xác minh tính nhất quán trong các đối tượng giả.
Dưới đây là một ví dụ về MockObject sử dụng Jmock.
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();
}
}