`
Kenny.Lee
  • 浏览: 515044 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

【转】Struts2+Spring的UnitTest编写(使用StrutsTestCase的子类StrutsSpringTestCase)

阅读更多
       我们都知道struts2有自己的对象工厂即obejectFactory,但是你也可以使用spring来作为对象工厂,继承了spring之后的单元测试要加什么东西呢?
      答案是要加入下面的这些包:spring-web-2.5.6.jar,spring-context-2.5.6.jar,spring- beans-2.5.6.jar,struts2-spring-plugin-2.1.8.1.jar这四个包,在web.xml文件中还要加入如下的代码行:
         <context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext-*.xml,classpath*:applicationContext-*.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

     如果你要编写测试类,要继承StrutsSpringTestCase,一定要这样做,我的测试类如下:

import org.apache.struts2.StrutsSpringTestCase;
import org.apache.struts2.dispatcher.mapper.ActionMapping;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionProxy;

public class HelloWorldSpringTest extends StrutsSpringTestCase {

// @Override
// public String getContextLocations() {
// return "edu/ku/it/si/tutorial/action/TestAccountAction-context.xml";
// }
public void testGetActionMapping() throws Exception {
ActionMapping mapping = getActionMapping("/begin/helloWorld.action");
assertNotNull(mapping);
assertEquals("/begin", mapping.getNamespace());
assertEquals("helloWorld", mapping.getName());
}

public void testGetActionProxy() throws Exception {
request.setParameter("username", "FD");
ActionProxy proxy = getActionProxy("/begin/helloWorld.action");
assertNotNull(proxy);

HelloWorld action = (HelloWorld) proxy.getAction();
assertNotNull(action);

String result = proxy.execute();
assertEquals(Action.SUCCESS, result);
assertEquals("FD", action.getUsername());
}
}

测试类的内容和上一篇一样,只是继承类不一样,StrutsSpringTestCase是StrutsTestCase的子类,这个单元测试默认读取配置文件applicationContext.xml的位置是类路径的根目录,如果你把这个文件放在不同位置或者取了一个不同的名称可以通过覆盖父类中的protected java.lang.String getContextLocations()来指定你的配置文件。


其他的地方和之前那篇日志中的一样,但是之前写的那个没有和spring继承的单元测试就不能使用了,如果你运行会报下面的错误:
SEVERE:   [19:33.501] ********** FATAL ERROR STARTING UP STRUTS-SPRING INTEGRATION **********
Looks like the Spring listener was not configured for your web app!
Nothing will work until WebApplicationContextUtils returns a valid ApplicationContext.
You might need to add the following to web.xml:
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
SEVERE:   [19:33.541] Dispatcher initialization failed

正如你所见到的我们已经指定了监听器,解决办法是吧你的测试类的父类改成StrutsSpringTestCase就可以解决问题。

原文完,详细见:http://kang36897.blog.163.com/blog/static/170473732010710101238126/
----------------------------------

后记:

网上在struts2+Spring编写单元测试的问题里,发现大多问题是spring的配置文件applicationContext.xml的路径或者多个时如何修改。其实很不明白为什么不在 applicationContext.xml主文件内倒入其他配置文件?这样web.xml不用配多个并且很清晰,而修改名字连applicationContext.xml都不存在的话我觉得是自己找事做罢了。

<import resource="classpath:spring-datasource.xml" />
	<import resource="classpath:spring-dao.xml" />
	<import resource="classpath:spring-business.xml" />
	<import resource="classpath:spring-struts.xml" />


推荐使用这种方法。
分享到:
评论
2 楼 Kenny.Lee 2012-04-27  
lychbeyond 写道
我学做个例子:
....

代码执行到
ActionProxy proxy = getActionProxy("/ut/regnlogin/activateUserByEmail.action");
显示空指针,是哪里的问题呀?
路径改成:.... getActionProxy("/ut/regnlogin/activateUserByEmail");
或getActionProxy("/activateUserByEmail.action");
或getActionProxy("/activateUserByEmail");
都还是空指针,是什么原因呢?




请看清楚,文章中用的是StrutsSpringTestCase。
1 楼 lychbeyond 2012-04-27  
我学做个例子:
其中stuts.xml文件如下:
<constant name="struts.objectFactory" value="spring" />
<!-- Add packages here -->
<package name="default" namespace="/ut/regnlogin" extends="struts-default">
<action name="activateUserByEmail" class="activateUserByEmailBean">
<result>/ut/regnlogin/success.jsp</result>
<result name="error">/ut/regnlogin/error.jsp</result>
</action>


测试类如下:

public class ActivateUserByEmailTest extends StrutsTestCase{
@Test
public void testExecute() throws Exception {


MockHttpServletRequest request = new MockHttpServletRequest();

request.setParameter("id", "email1");

ActionProxy proxy = getActionProxy("/ut/regnlogin/activateUserByEmail.action");

assertNotNull(proxy);

ActivateUserByEmail action = (ActivateUserByEmail) proxy.getAction();

assertNotNull(action);
String result;

result = proxy.execute();


assertEquals(Action.SUCCESS, result);
}

执行结果:
java.lang.NullPointerException  
        at org.apache.struts2.StrutsTestCase.getActionProxy(StrutsTestCase.java:130)
at com.cnbab.proj118.regnlogin.action.ActivateUserByEmailTest.testExecute(ActivateUserByEmailTest.java:60)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)

代码执行到
ActionProxy proxy = getActionProxy("/ut/regnlogin/activateUserByEmail.action");
显示空指针,是哪里的问题呀?
路径改成:.... getActionProxy("/ut/regnlogin/activateUserByEmail");
或getActionProxy("/activateUserByEmail.action");
或getActionProxy("/activateUserByEmail");
都还是空指针,是什么原因呢?


相关推荐

    python+selenium+unittest自动化测试demo

    Python+Selenium+Unittest自动化测试框架是一个强大的组合,用于高效地进行Web应用的自动化测试。在本示例中,我们看到一个基于这三个组件构建的自动化测试项目,它提供了丰富的功能,如测试用例管理、批量执行、...

    python+selenium+unittest环境搭建1

    Python+Selenium+Unittest环境搭建详解 Python+Selenium+Unittest环境搭建是自动化测试中的一种重要组件,本文将详细介绍如何搭建Python+Selenium+Unittest环境,并解决在搭建过程中可能遇到的问题。 一、安装...

    Python+selenium+HTMLTestRunner+unittest 测试框架程序及文档

    Python+selenium+HTMLTestRunner+unittest 测试框架程序及文档,框架基础已可以正常使用,要学习Web UI自动化的可下载,高手绕道!这个文档的分数在哪里修改不知道,默认5分不是来赚分设置的,要是有需要直接约留下...

    python+selenium+unittest测试demo

    1、使用HTMLTestRunner生成测试报告; 2、添加测试套件,运行一个文件执行所有测试用例; 3、只在测试执行前打开浏览器,所有用例执行结束后关闭浏览器。(解决反复启动/关闭driver导致的执行效率问题) 这个源码...

    基于python3+django+requests+ddt+unittest的接口自动化测试平台源码+项目说明.zip

    1、该资源包括项目的全部源码,下载可以直接使用! 2、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末大作业和毕设项目,作为参考资料学习借鉴。 3、本资源作为“参考资料”如果需要实现其他功能,...

    python3+unittest+request+ddt接口测试

    unittest 是 Python 内置的一个单元测试框架,用于编写和执行自动化测试用例,确保代码的质量和功能稳定性。 在接口测试中,我们通常需要模拟HTTP请求来验证服务器端接口的功能。Python 的 requests 库提供了简单...

    Python3+unittest+requests+excel实现接口自动化测试框架

    unittest是Python内置的一个单元测试框架,它提供了编写测试用例、组织测试套件和运行测试的基本结构。 unittest框架允许我们定义测试类和测试方法,每个方法以`test_`开头,代表一个测试用例。我们可以为每个接口...

    python+selenium3+unittest项目实战WebUI.zip

    Python+Selenium3+Unittest是自动化测试领域中一个常见的组合,尤其在Web应用程序的UI测试中,这三者发挥着至关重要的作用。Python是一种高级编程语言,以其简洁、易读的语法深受程序员喜爱,尤其适合编写自动化测试...

    Selenium+Unittest+HtmlTestRunner自动化框架

    **Selenium+Unittest+HtmlTestRunner自动化框架详解** 在软件测试领域,自动化测试是提高效率、确保产品质量的重要手段。Selenium作为一个强大的Web自动化测试工具,因其跨平台性、广泛支持多种浏览器以及丰富的API...

    Python + Requests + Unittest接口自动化测试实例分析

    主要介绍了Python + Requests + Unittest接口自动化测试,结合具体实例形式分析了Python使用Requests与Unittest模块实现接口自动化测试相关操作技巧,需要的朋友可以参考下

    python+selenium+unittest 只启动一次浏览器方法(csdn)————程序.pdf

    2. **unittest框架**: Python内置的单元测试框架,可以编写和组织测试用例。unittest提供了诸如setUp和tearDown这样的方法,可以在每个测试之前和之后自动执行,非常适合设置和清理测试环境。 3. **只启动一次...

    Python3+unittest+requests+excel实现接口自动化测试框架源码

    unittest是Python内置的一个轻量级的单元测试框架,用于编写和运行可重复的自动化测试。在接口自动化测试中,unittest可以创建测试用例(TestCase)来组织和执行一系列测试方法。每个测试方法都应以`test_`开头,...

    python+unittest框架自动化selenium方法的封装

    selenium方法的二次封装使代码变得简洁,封装的代码使用起来可读性也比较高

    python+unittest+requests实现接口自动化的方法

    ### Python + Unittest + Requests 实现接口自动化详解 在当今快速发展的软件开发领域,接口自动化测试已成为确保系统稳定性和质量的重要手段之一。Python作为一种简洁易学的语言,搭配强大的测试框架如Unittest...

    python+unittest框架最新版UI自动化设计思路(csdn)————程序.pdf

    Python+unittest框架是一种广泛使用的UI自动化测试解决方案,尤其适合大型项目的测试需求。在这个最新的设计思路中,作者在原有的Excel纯数据驱动的基础上进行了改良和优化,旨在提高自动化测试的灵活性和实用性。 ...

    Git+Jenkins+Unittest+bs4爬虫+Page Object Python架构师级接口测试高级课

    Git+Jenkins+Unittest+bs4爬虫+Page Object Python架构师级接口测试高级课

    Python+seleunim+ddt+unittest自动化数据驱动心得

    在执行测试时,可以使用unittest的TestLoader来自动发现并加载所有测试用例,然后通过TextTestRunner来运行测试并生成详细的测试报告。如果遇到测试失败,我们可以根据报告中的信息定位问题,修复代码后再次运行测试...

    python3+selenium3单元测试框架(unittest)使用介绍

    为了运行编写在Python语言中的WebDriver测试脚本,通常会使用unittest框架。unittest是Python标准库的一部分,它借鉴了JUnit的设计理念,广泛应用于Python程序的单元测试。 unittest框架中几个核心概念包括: 1. ...

    python+excel+unittest接口测试

    为了更好地组织和管理测试,我们可以使用unittest的子类化和`TestLoader`,自动发现并加载所有的测试用例。这样,当测试执行时,unittest会自动运行所有找到的测试,生成详细的测试报告。 总的来说,这个项目利用...

    自动化测试python 3.6+pycharm 2018+selenium +unittest和pytest

    本教程主要涉及使用Python 3.6、PyCharm 2018、Selenium、unittest和pytest框架进行自动化测试,同时利用HTMLTestRunner生成测试报告,并通过Jenkins实现持续集成。以下是详细的知识点解析: 1. **环境搭建**: - ...

Global site tag (gtag.js) - Google Analytics