JUnit是一套优秀的单元测试框架,而Maven是优秀的Java项目构建和管理工具,两者结合可以很方便地对项目进行自动化测试。
一般的简单Java应用就不多说了,一些框架会提供针对junit的扩展,使得测试变得更容易,例如Spring官方就提供了spring-test,用于提供获取ApplicationContext等方面的支持。
首先要做的是,改变JUnit的实际执行类,将默认的执行类Suite替换为Spring提供的SpringJUnit4ClassRunner,也就是在测试类前面加上一个注解:
@RunWith(SpringJUnit4ClassRunner.class)
然后,我们需要告诉这个测试类Spring配置文件的位置:
@ContextConfiguration(locations={"classpath:applicationContext.xml",
"classpath:applicationContext-security.xml","file:src/main/webapp/WEB-INF/servlet.xml"})
笔者这里展示了两种配置文件路径的写法。前两个是spring常见的配置文件,放在classpath根目录下,而“file”开头的路径是完全限定路径,默认是相对于实际的项目路径的,例如笔者使用Eclipse进行开发,这个路径的写法是相对于项目文件所在文件夹的根目录的。该写法适用于没有直接放在classpath下的一些web相关的配置文件,例如本例展示的就是放在常见的WEB-INF目录下的一个文件。
基于以上描述,笔者写了一个Spring测试基类:
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。
分享到:
相关推荐
**JUnit** 是Java编程语言的一个单元测试框架,它使开发者能够编写可重复运行的测试用例,以确保代码的质量和功能正确性。JUnit支持注解、参数化测试、异常测试等多种测试方法。在本实例中,JUnit将用于测试业务逻辑...
总结起来,"maven+spring+mybatis+mysql+junit jar项目框架搭建"是一个完整的Java后端开发流程,涵盖了从项目构建、服务层、数据访问层到数据库管理和单元测试的全过程。这样的框架为开发者提供了一个高效、稳定且...
这个项目的核心是利用Spring作为应用的ioc(Inversion of Control,控制反转)和aop(Aspect Oriented Programming,面向切面编程)容器,MyBatis作为持久层框架,以及JUnit4用于进行单元测试和集成测试。...
JUnit5是当前的最新版本,支持Maven项目管理,并且被广泛集成在现代Java开发环境中,如Spring Boot。JUnit5引入了新的注解,如@Test、@BeforeEach、@AfterEach等,使得测试更加灵活和可定制。此外,JUnit5还支持并行...
- Spring Boot项目通常包含JUnit测试,Eclipse内置了测试框架支持,可以直接运行单元测试。 8. **持续集成与部署**: - Maven可以配合Jenkins、Git等工具实现持续集成,自动构建并部署应用到服务器。 - Spring ...
Maven是一款强大的Java项目管理工具,它通过XML格式的配置文件(pom.xml)来管理项目的构建、报告和依赖关系。在Spring 5.0框架的开发中,Maven扮演着至关重要的角色,帮助开发者集成各种库和组件,简化项目的构建...
在实际开发流程中,这可能包括单元测试、集成测试和性能测试,确保应用的质量和稳定性。Spring框架提供了JUnit和Mockito等工具的集成,方便进行测试驱动开发(Test-Driven Development, TDD)。 总的来说,"Spring ...
Maven支持JUnit和其他测试框架进行单元测试和集成测试。在POM.xml中添加测试依赖后,可以通过Maven的`test`生命周期阶段运行测试。 8. 应用部署: 使用Maven打包出的JAR或WAR文件可以直接部署到应用服务器,如...
- src/test/java:测试代码目录,使用JUnit或其他测试框架进行单元测试或集成测试。 - pom.xml:Maven的项目对象模型文件,定义了项目的依赖和构建过程。 通过这个学习源码,你可以学习到如何组织Spring Boot的...
5. 其他可能的辅助库,如JUnit进行单元测试,Servlet API和JSTL用于Web开发。 配置好`pom.xml`后,执行`mvn install`命令,Maven将下载所有依赖并构建项目。接下来,我们需要创建Spring的配置文件,一般为`...
本教程将详细讲解如何使用四个关键的技术栈——Maven、SpringMVC、MyBatis和JUnit来搭建一个功能完善的示例项目,并包含了数据库操作和单元测试。下面,我们将深入探讨每个组件以及它们在项目中的作用。 首先,**...
本文将深入探讨如何在IDEA中对Spring多模块项目中的Service层进行单元测试。 首先,我们需要理解Spring Boot的多模块架构。一个标准的Spring Boot多模块项目通常包括以下部分:父模块(parent)、应用主模块...
在Java世界里,Maven通过XML文件(pom.xml)来管理项目的构建过程,依赖关系以及版本控制。在本项目中,Maven负责下载和管理所有必要的库和依赖,使项目构建变得更加简单。 Eclipse是流行的Java集成开发环境(IDE)...
整个整合过程中,Maven负责项目的构建和依赖管理,SpringMVC提供MVC架构,MyBatis用于ORM(对象关系映射),而Junit则帮助我们进行单元测试。这些技术的结合使得开发、测试和部署Web应用程序变得更加高效和便捷。
【标题】"最简单的含单元测试的spring boot+activiti集成demo" 描述了一种将流行的Spring Boot框架与流程管理工具Activiti结合使用的实践案例。这个集成演示项目旨在帮助开发者快速理解和实现基于Spring Boot的...
SpringBoot支持JUnit和Spring Test框架进行单元测试和集成测试。在非Maven项目中,测试类依然可以正常编写,但测试依赖需要手动添加,并可能需要自定义的测试执行脚本。 总的来说,虽然“SpringBoot Demo(非maven...
8. 单元测试与集成测试:使用JUnit或Mockito进行单元测试,可能还需要Maven插件如Surefire或Failsafe进行自动化测试。 9. 日志框架:如Log4j或SLF4J,用于记录程序运行日志。 10. 持续集成/持续部署(CI/CD):了解...
在本文中,我们将深入探讨如何使用Spring MVC...Spring MVC处理请求和响应,MyBatis负责数据库操作,Maven管理项目构建,而JUnit确保代码的正确性。这个例子展示了如何将这些技术整合在一起,实现完整的网页CRUD功能。
【标题】"spring+springmvc+mybatis+maven+junit整合"是一个常见的Java Web开发框架集成,这个项目旨在为初学者提供一个基础的、可运行的示例,以理解这些技术如何协同工作。 【Spring框架】是核心的依赖注入(DI)...
【标题】"eclipse_springmvc_maven_mybatis3_junit4" 提示我们这是一个基于Eclipse开发的项目,它整合了Spring MVC、Maven、MyBatis和JUnit4这四大核心组件,用于构建Web应用程序的示例。下面将详细阐述这些技术及其...