【转】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就可以解决问题。

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

后记:

网上在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" />


推荐使用这种方法。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python + Selenium + unittest 是一种常用的自动化测试框架,可以用于 web 应用程序的自动化测试。下面是一个简单的示例: 1. 安装 Python 和 Selenium: 首先需要安装 Python 和 Selenium,可以通过以下命令在终端中进行安装: ``` pip install selenium ``` 2. 创建一个测试文件(例如 `test.py`),引入必要的库: ```python from selenium import webdriver import unittest ``` 3. 在测试类中,初始化 webdriver,并编写测试用例: ```python class TestWeb(unittest.TestCase): def setUp(self): self.driver = webdriver.Chrome() self.driver.get("http://www.baidu.com") def test_search(self): driver = self.driver elem = driver.find_element_by_name("wd") elem.send_keys("selenium") elem.submit() self.assertIn("selenium", driver.title) def tearDown(self): self.driver.quit() if __name__ == '__main__': unittest.main() ``` 在上面的例中,我们使用 Chrome 浏览器来打开百度网站,并在搜索框中输入关键字“selenium”,然后提交搜索。我们使用 `assertIn` 方法来验证页面标题是否包含关键字“selenium”。 4. 运行测试用例: 在终端中运行以下命令: ``` python test.py ``` 如果一切正常,你应该可以看到测试用例成功运行,并且输出类似于以下内容的结果: ``` Ran 1 test in 3.629s OK ``` 这只是一个简单的示例,实际的测试框架可能需要更多的配置和代码。你可以通过查看 Selenium 和 unittest 的文档来了解更多信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值