课程表

JUnit课程

工具箱
速查手册

JUnit - 框架扩展

当前位置:免费教程 » Java相关 » JUnit

以下是 JUnit 扩展

  • Cactus
  • JWebUnit
  • XMLUnit
  • MockObject

Cactus

Cactus 是一个简单框架用来测试服务器端的 Java 代码(Servlets, EJBs, Tag Libs, Filters)。Cactus 的设计意图是用来减小为服务器端代码写测试样例的成本。它使用 JUnit 并且在此基础上进行扩展。Cactus 实现了 in-container 的策略,意味着可以在容器内部执行测试。

Cactus 系统由以下几个部分组成:

  • Cactus Framework(Cactus 框架) 是 Cactus 的核心。它是提供 API 写 Cactus 测试代码的引擎。
  • Cactus Integration Modules(Cactus 集成模块) 它是提供使用 Cactus Framework(Ant scripts, Eclipse plugin, Maven plugin)的前端和框架。

这是使用 cactus 的样例代码。

  1. import org.apache.cactus.*;
  2. import junit.framework.*;
  3. public class TestSampleServlet extends ServletTestCase {
  4. @Test
  5. public void testServlet() {
  6. // Initialize class to test
  7. SampleServlet servlet = new SampleServlet();
  8. // Set a variable in session as the doSomething()
  9. // method that we are testing
  10. session.setAttribute("name", "value");
  11. // Call the method to test, passing an
  12. // HttpServletRequest object (for example)
  13. String result = servlet.doSomething(request);
  14. // Perform verification that test was successful
  15. assertEquals("something", result);
  16. assertEquals("otherValue", session.getAttribute("otherName"));
  17. }
  18. }

JWebUnit

JWebUnit 是一个基于 Java 的用于 web 应用的测试框架。它以一种统一、简单测试接口的方式包装了如 HtmlUnit 和 Selenium 这些已经存在的框架来允许你快速地测试 web 应用程序的正确性。

JWebUnit 提供了一种高级别的 Java API 用来处理结合了一系列验证程序正确性的断言的 web 应用程序。这包括通过链接,表单的填写和提交,表格内容的验证和其他 web 应用程序典型的业务特征。

这个简单的导航方法和随时可用的断言允许建立更多的快速测试而不是仅仅使用 JUnit 和 HtmlUnit。另外如果你想从 HtmlUnit 切换到其它的插件,例如 Selenium(很快可以使用),那么不用重写你的测试样例代码。

以下是样例代码。

  1. import junit.framework.TestCase;
  2. import net.sourceforge.jwebunit.WebTester;
  3. public class ExampleWebTestCase extends TestCase {
  4. private WebTester tester;
  5. public ExampleWebTestCase(String name) {
  6. super(name);
  7. tester = new WebTester();
  8. }
  9. //set base url
  10. public void setUp() throws Exception {
  11. getTestContext().setBaseUrl("http://myserver:8080/myapp");
  12. }
  13. // test base info
  14. @Test
  15. public void testInfoPage() {
  16. beginAt("/info.html");
  17. }
  18. }

XMLUnit

XMLUnit 提供了一个单一的 JUnit 扩展类,即 XMLTestCase,还有一些允许断言的支持类:

  • 比较两个 XML 文件的不同(通过使用 Diff 和 DetailedDiff 类)
  • 一个 XML 文件的验证(通过使用 Validator 类)
  • 使用 XSLT 转换一个 XML 文件的结果(通过使用 Transform 类)
  • 对一个 XML 文件 XPath 表达式的评估(通过实现 XpathEngine 接口)
  • 一个 XML 文件进行 DOM Traversal 后的独立结点(通过使用 NodeTest 类)

我们假设有两个我们想要比较和断言它们相同的 XML 文件,我们可以写一个如下的简单测试类:

  1. import org.custommonkey.xmlunit.XMLTestCase;
  2. public class MyXMLTestCase extends XMLTestCase {
  3. // this test method compare two pieces of the XML
  4. @Test
  5. public void testForXMLEquality() throws Exception {
  6. String myControlXML = "<msg><uuid>0x00435A8C</uuid></msg>";
  7. String myTestXML = "<msg><localId>2376</localId></msg>";
  8. assertXMLEqual("Comparing test xml to control xml",
  9. myControlXML, myTestXML);
  10. }
  11. }

MockObject

在一个单元测试中,虚拟对象可以模拟复杂的,真实的(非虚拟)对象的行为,因此当一个真实对象不现实或不可能包含进一个单元测试的时候非常有用。

用虚拟对象进行测试时一般的编程风格包括:

  • 创建虚拟对象的实例
  • 在虚拟对象中设置状态和描述
  • 结合虚拟对象调用域代码作为参数
  • 在虚拟对象中验证一致性

以下是使用 Jmock 的 MockObject 例子。

  1. import org.jmock.Mockery;
  2. import org.jmock.Expectations;
  3. class PubTest extends TestCase {
  4. Mockery context = new Mockery();
  5. public void testSubReceivesMessage() {
  6. // set up
  7. final Sub sub = context.mock(Sub.class);
  8. Pub pub = new Pub();
  9. pub.add(sub);
  10. final String message = "message";
  11. // expectations
  12. context.checking(new Expectations() {
  13. oneOf (sub).receive(message);
  14. });
  15. // execute
  16. pub.publish(message);
  17. // verify
  18. context.assertIsSatisfied();
  19. }
  20. }
转载本站内容时,请务必注明来自W3xue,违者必究。
 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号