Java单体测试工具cactus使用指南

发布于 2022-10-15 09:32:57 字数 5610 浏览 17 评论 0

  1. 1 cactus测试的原理
  2. 看下面这张图,这是一个测试工具Cactus测试Servlet的过程,而在过去测试Servlet是很麻烦的。
  3. 1.首先,JUnit测试器执行YYYTestCase.runTest(),这个函数找到beginXXX(WebRequest)执行它,这个过程发生在客户端。WebRequest作为参数,它包含了请求的HTTP头、HTTP参数,它将被传送到第2步的重定向代理器中。
  4. 2.YYYTestCase.runTest()建立一个到重定向代理器的HTTP链接. 上一步的WebRequest传了过去。
  5. 3.从客户端来看,重定向代理器好像是在服务器运行一样。这意味着你的测试用例类将被实例两次:一次是在客户端(被JUnit测试器实例),另一次是在服务器端(被重定向代理器实例)。客户端的实例用来执行beginXXX()和endXXX()函数,服务器端实例用来执行第4步中的testXXX()函数。
  6. 4.setUp(), testXXX()和tearDown()被依次执行,它们被重定向代理器以reflection机制执行。当然,setUp()和tearDown()是可选的(就像在JUnit里一样)。
  7. 5.你的testXXX()将调用服务器端代码测试,并使用JUnit的断言API来观察执行效果(如assert(), assertEquals(), fail(), ...)
  8. 6.如果测试失败,你的testXXX()函数抛出的异常将被重定向代理器捕获。
  9. 7.如果出现异常,重定向代理器返回它的信息(包含名字,类,栈顶数据)到客户端,然后异常信息将显示在JUnit的测试器上。
  10. 8.如果没有异常产生,YYYTestCase.runTest()函数则找到endXXX(org.apache.cactus.WebResponse)或endXXX(com.meterware.httpunit.WebResponse) 函数执行。在全过程中,你有机会在endXXX()函数检查HTTP头,Cookies以及servlet的输出流。
  11. 2.cactus 的安装
  12. 文件下载地址:
  13. http://www.javaresearch.org/oss/download/cactus/jakarta-cactus-12-1.6.1.zip
  14. 使用方式:
  15. 解压压缩包后将lib文件夹下的全部JAR添加到相关项目目录(为保证确认,可以将路径同时添加到classpath中),配置cactus.properties文件,修改cactus.contextURL值为所在webapp的起始路径,同时将该文件放置到classpath路径中
  16. 如例:
  17. # Configuration file for Cactus.
  18. # Each project using Cactus need to have such a file put in the client side
  19. # CLASSPATH (Meaning the directory containgin this file should be in the client
  20. # side CLASSPATH, not the file itself of course ... :) )
  21. # Defines the URLs that will be used by Cactus to call it''s redirectors
  22. # (Servlet and JSP). You need to specify in these URLs the webapp context
  23. # that you use for your application. In the example below, the context is
  24. # "test".
  25. cactus.contextURL = http://localhost:8080/Fund_Cafe
  26. cactus.servletRedirectorName = ServletRedirector
  27. cactus.enableLogging=true
  28. 修改WEB应用下web.xml文件添加相应的SERVLET映射
  29. 如例;
  30. <?xml version="1.0" encoding="UTF-8"?>
  31. <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
  32. <web-app>
  33. <servlet>
  34. <servlet-name>TS</servlet-name>
  35. <servlet-class>jp.co.abic.wam.startmenu.ForwardLauncher</servlet-class>
  36. <init-param>
  37. <param-name>debug</param-name>
  38. <param-value>2</param-value>
  39. </init-param>
  40. <init-param>
  41. <param-name>WAM_HOME</param-name>
  42. <param-value>D:\Fund_Cafe\conf</param-value>
  43. </init-param>
  44. <init-param>
  45. <param-name>FORWARD_SERVLET</param-name>
  46. <param-value>TS2</param-value>
  47. </init-param>
  48. <load-on-startup>2</load-on-startup>
  49. </servlet>
  50. <servlet>
  51. <servlet-name>TS2</servlet-name>
  52. <servlet-class>jp.co.abic.wam.WAMServlet</servlet-class>
  53. <init-param>
  54. <param-name>debug</param-name>
  55. <param-value>2</param-value>
  56. </init-param>
  57. <init-param>
  58. <param-name>WAM_HOME</param-name>
  59. <param-value>D:\Fund_Cafe\conf</param-value>
  60. </init-param>
  61. <load-on-startup>2</load-on-startup>
  62. </servlet>
  63. <servlet>
  64. <servlet-name>ServletRedirector</servlet-name>
  65. <servlet-class>org.apache.cactus.server.ServletTestRedirector</servlet-class>
  66. </servlet>
  67. <servlet-mapping>
  68. <servlet-name>ServletRedirector</servlet-name>
  69. <url-pattern>/ServletRedirector</url-pattern>
  70. </servlet-mapping>
  71. <servlet-mapping>
  72. <servlet-name>TS</servlet-name>
  73. <url-pattern>/TS</url-pattern>
  74. </servlet-mapping>
  75. <servlet-mapping>
  76. <servlet-name>TS2</servlet-name>
  77. <url-pattern>/TS2</url-pattern>
  78. </servlet-mapping>
  79. <resource-ref>
  80. <description>Oracle DataSource example</description>
  81. <res-ref-name>oraclePool</res-ref-name>
  82. <res-type>javax.sql.DataSource</res-type>
  83. <res-auth>Container</res-auth>
  84. </resource-ref>
  85. </web-app>

复制代码

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

丑丑阿 2022-10-22 09:32:57
  1. 3.实际举例
  2. 被测试类: ForwardLauncher
  3. 测试类: Test
  4. 测试条件1:B=9914,S=123456789,ServerID=AA, BHD0001=1,E=0(程序正常路径,显示选择菜单)
  5. 测试条件2:B=9914(程序异常路径,显示发生错误的页面)
  6. Test类内容如下:
  7. package jp.co.abic.wam;
  8. import java.io.IOException;
  9. import javax.servlet.ServletException;
  10. import jp.co.abic.wam.startmenu.ForwardLauncher;
  11. import org.apache.cactus.ServletTestCase;
  12. import org.apache.cactus.WebRequest;
  13. import org.apache.cactus.WebResponse;
  14. /**
  15. * @author sfluo
  16. *
  17. * TODO To change the template for this generated type comment go to
  18. * Window - Preferences - Java - Code Style - Code Templates
  19. */
  20. public class Test extends ServletTestCase {
  21. ForwardLauncher wamServlet=new ForwardLauncher();
  22. public static void main(String[] args) {
  23. junit.textui.TestRunner.run(Test.class);
  24. }
  25. /*
  26. * @see TestCase#setUp()
  27. */
  28. protected void setUp() throws Exception {
  29. config.setInitParameter("FORWARD_SERVLET","TS2");
  30. wamServlet.init(config);
  31. }
  32. /*
  33. * @see TestCase#tearDown()
  34. */
  35. protected void tearDown() throws Exception {
  36. super.tearDown();
  37. }
  38. /*
  39. * Class under test for void doGet(HttpServletRequest, HttpServletResponse)
  40. */
  41. public void beginDoGetHttpServletRequestHttpServletResponseA(WebRequest theRequest){
  42. theRequest.addParameter("B", "9914");
  43. theRequest.addParameter("S", "123456789");
  44. theRequest.addParameter("ServerID", "AA");
  45. theRequest.addParameter("BHD0001", "1");
  46. theRequest.addParameter("E", "0");
  47. }
  48. public final void testDoGetHttpServletRequestHttpServletResponseA() {
  49. try {
  50. wamServlet.doGet(request,response);
  51. } catch (ServletException e) {
  52. // TODO Auto-generated catch block
  53. e.printStackTrace();
  54. } catch (IOException e) {
  55. // TODO Auto-generated catch block
  56. e.printStackTrace();
  57. }
  58. //TODO Implement doGet().
  59. }
  60. public final void endDoGetHttpServletRequestHttpServletResponseA(WebResponse theResponse){
  61. System.out.print(theResponse.getText());
  62. }
  63. public void beginDoGetHttpServletRequestHttpServletResponseB(WebRequest theRequest){
  64. theRequest.addParameter("B", "9914");
  65. }
  66. public final void testDoGetHttpServletRequestHttpServletResponseB() {
  67. try {
  68. wamServlet.doGet(request,response);
  69. } catch (ServletException e) {
  70. // TODO Auto-generated catch block
  71. e.printStackTrace();
  72. } catch (IOException e) {
  73. // TODO Auto-generated catch block
  74. e.printStackTrace();
  75. }
  76. //TODO Implement doGet().
  77. }
  78. public final void endDoGetHttpServletRequestHttpServletResponseB(WebResponse theResponse){
  79. System.out.print(theResponse.getText());
  80. }
  81. }

复制代码

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文