Java: Phần mở rộng
Sau đây là các phần mở rộng JUnit:
- Cactus
- JWebUnit
- XMLUnit
- MockObject
Cactus
Cactus là một framework test đơ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 triển khai chiến lược trong vùng chứa để thực hiện các test bên trong vùng chứa.
Hệ sinh thái Cactus được tạo thành từ một số thành phần:
- Cactus Framework là trái tim của Cactus. Nó là công cụ cung cấp API để viết các test Cactus.
- Các mô-đun tích hợp Cactus là giao diện người dùng (font-end) và framework cung cấp các cách dễ dàng để sử dụng Cactus Framework (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 framework test dựa trên Java cho các ứng dụng web. Nó bao bọc các framework test hiện có như HtmlUnit và Selenium bằng một interface test đơ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 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 test 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 của XML (thông qua các lớp Diff và DetailedDiff).
- 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).
- Đánh giá 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 ta có hai phần XML mà chúng ta 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 test đơ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 một đơn vị test, 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 mô phỏng) và do đó rất hữu ích khi một đối tượng thực là không thực tế hoặc không thể kết hợp vào đơn vị test.
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(); } }