当前位置:   article > 正文

java web junit_Maven管理的Spring Web项目集成JUnit单元测试

meven本地批量单元测试

package com.test.basic;

import org.apache.commons.logging.Log;

import org.apache.commons.logging.LogFactory;

import org.junit.Before;

import org.junit.runner.RunWith;

import org.springframework.test.context.ContextConfiguration;

import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

@RunWith(SpringJUnit4ClassRunner.class)

@ContextConfiguration(locations={/*"file:src/main/webapp/WEB-INF/wxiot-servlet.xml",*/ "classpath:applicationContext.xml",

"classpath:applicationContext-security.xml"})

public classTestBase {

protected Log logger = LogFactory.getLog(TestBase.class);

@Before

//一些公用的“初始化”代码

public void before(){

}

}

有了这个基类,我们就可以动手写各个模块的测试类了,只要在定义测试类的时候继承TestBase,并在具体的方法前面加上@Test注解,笔者这里给出一个测试类的简单示例:

import org.junit.Assert;

import org.junit.Test;

import org.springframework.beans.factory.annotation.Autowired;

import com.reports.util.ActiveMQSender;

import com.test.basic.TestBase;

public classActiveMQSenderTest extends TestBase {

@Autowired

ActiveMQSendersender;

@Test

public void sendQTest(){

Assert.assertNull(sender.sendInformationQ("发,布。到?队!列“的¥信息", "20131023102122", "20131025102122"));

Assert.assertNotNull(sender.sendInformationQ("发,布。到?队!列“的¥信息", "20131023102122", "2013-10-26 10:21:22"));

}

@Test

public void sendTopicTest(){

Assert.assertNull(sender.sendInformationTopic("发,布。到?Topic!的”信¥息", "20131023102122","20131025102122") );

}

}

最后执行“RunAs -> JUnit Test”即可开始JUnit单元测试了,使用Maven命令还可以方便地对特定目录下(通常是src/test/java目录)的所有测试类进行批量测试。

对于Java Web项目,某些业务类可能会带有使用ServletContext等Web容器相关类的代码,对于这些类我们就不能直接用JUnit来测试了,因为默认JUnit是没有Web容器的,我们通常需要借助其它相关的辅助类或者模拟Web容器来进行测试,例如利用struts2-junit-plugin的帮助来测试struts的action,这些内容网上的资料很多,不在本文的讨论范围之内。

一些用到了web容器的业务类只需稍加修改,就可以直接用于JUnit测试。假设一个业务类使用了ServletContext来获取容器内的资源,例如一个配置文件:

InputStream is=context.getResourceAsStream("/WEB-INF/configs/command-sender.xml");

其中context变量保存了Web容器的ServletContext,如果直接使用JUnit来测试,必然导致空指针异常。此时我们可以稍作修改:

InputStream is = null;

if(null != context){

is= context.getResourceAsStream("/WEB-INF/configs/command-sender.xml");

}else{//JUnit Test环境下,使用ApplicationContext获取配置文件

//NearEast 2013-10-22

try {

is= SpringContextHolder.getApplicationContext().

getResource("file:src/main/webapp/WEB-INF/configs/command-sender.xml").getInputStream();

}catch(IOException e) {

e.printStackTrace();

}

}

其中,SpringContextHolder是笔者在《在Java Web应用中获取Spring管理的Bean的方法》提到的一个工具类,SpringContextHolder.getApplicationContext()即获得Spring的ApplicationContext。资源的路径使用了上文提到的完全限定路径,我们也可以将其写为类似“file:E:/Workspaces/workspace_test/test/src/main/webapp/WEB-INF/configs/command-sender.xml"”的形式。经过上述修改之后,我们的业务类也可以直接利用JUnit执行测试了。

当然我们还可以用其它方式获取ApplicationContext,例如让业务类实现ApplicationContextAware接口,并使用一个变量保存ApplicationContext。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/135827
推荐阅读
相关标签
  

闽ICP备14008679号