SSM框架中测试单元的使用 spring整合Junit过程详解
测试类中的问题和解决思路
问题
在测试类中,每个测试方法都有以下两行代码:
ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml"); IAccountService as = ac.getBean("accountService",IAccountService.class);
这两行代码的作用是获取容器,如果不写的话,直接会提示空指针异常。所以又不能轻易删掉。
解决思路分析
针对上述问题,我们需要的是程序能自动帮我们创建容器。一旦程序能自动为我们创建 spring 容器,我们就无须手动创建了,问题也就解决了。
我们都知道,junit 单元测试的原理(在 web 阶段课程中讲过),但显然,junit 是无法实现的,因为它自己都无法知晓我们是否使用了 spring 框架,更不用说帮我们创建 spring 容器了。不过好在,junit 给我们暴露了一个注解,可以让我们替换掉它的运行器。
这时,我们需要依靠 spring 框架,因为它提供了一个运行器,可以读取配置文件(或注解)来创建容器。我们只需要告诉它配置文件在哪就行了。
配置步骤
第一步:拷贝整合 junit的必备 jar包到 lib目录
此处需要注意的是,导入 jar 包时,需要导入一个 spring 中 aop 的 jar 包。
第二步:使用@RunWith注解替换原有运行器
/** * 测试类 * @Version 1.0 */ @RunWith(SpringJUnit4ClassRunner.class) public class AccountServiceTest { }
第三步:使用@ContextConfiguration指定 spring配置文件的位置
/** */ @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations= {"classpath:bean.xml"}) public class AccountServiceTest { }
@ContextConfiguration 注解:
locations 属性:用于指定配置文件的位置。如果是类路径下,需要用 classpath:表明classes 属性:用于指定注解的类。当不使用 xml 配置时,需要用此属性指定注解类的位置。
第四步:使用@Autowired给测试类中的变量注入数据
/** */ @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations= {"classpath:bean.xml"}) public class AccountServiceTest { @Autowired private IAccountService as ; }
为什么不把测试类配到 xml中
在解释这个问题之前,先解除大家的疑虑,配到 XML 中能不能用呢? 答案是肯定的,没问题,可以使用。
那么为什么不采用配置到 xml 中的方式呢? 这个原因是这样的:
第一:当我们在 xml 中配置了一个 bean,spring 加载配置文件创建容器时,就会创建对象。
第二:测试类只是我们在测试功能时使用,而在项目中它并不参与程序逻辑,也不会解决需求上的问题,所以创建完了,并没有使用。那么存在容器中就会造成资源的浪费。
所以,基于以上两点,我们不应该把测试配置到 xml 文件中。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
相关推荐
-
详解Spring Boot Junit单元测试
Junit这种老技术,现在又拿出来说,不为别的,某种程度上来说,更是为了要说明它在项目中的重要性. 凭本人的感觉和经验来说,在项目中完全按标准都写Junit用例覆盖大部分业务代码的,应该不会超过一半. 刚好前段时间写了一些关于SpringBoot的帖子,正好现在把Junit再拿出来从几个方面再说一下,也算是给一些新手参考了. 那么先简单说一下为什么要写测试用例 1. 可以避免测试点的遗漏,为了更好的进行测试,可以提高测试效率 2. 可以自动测试,可以在项目打包前进行测试校验 3. 可以及时发现因
-
Spring Boot 单元测试JUnit的实践
一.介绍 JUnit是一款优秀的开源Java单元测试框架,也是目前使用率最高最流行的测试框架,开发工具Eclipse和IDEA对JUnit都有很好的支持,JUnit主要用于白盒测试和回归测试. <!--more--> 白盒测试:把测试对象看作一个打开的盒子,程序内部的逻辑结构和其他信息对测试人 员是公开的: 回归测试:软件或环境修复或更正后的再测试: 单元测试:最小粒度的测试,以测试某个功能或代码块.一般由程序员来做,因为它需要知道内部程序设计和编码的细节: JUnit GitHub地址:ht
-
在Spring boot的项目中使用Junit进行单体测试
使用Junit或者TestNG可以进行单体测试,这篇文章简单说明一下如何在Spring boot的项目中使用Junit进行单体测试. pom设定 pom中需要添加spring-boot-starter-test <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>
-
SSM框架整合之junit测试的方法
1:和junit一起使用的时候因为没有读取配置文件,所以老是报创建Bean失败,上网查了查,原来是先要读取spring的核心配置文件,这样机也能够启动IOC容器了, 可以先创建一个父类,在父类里面读取配置文件创建IOC容器,然后让子类继承他就可以了 BaseTest.java package com.carry.ssm.test; import javax.annotation.Resource; import javax.security.auth.PrivateCredentialPermi
-
基于Springboot+Junit+Mockito做单元测试的示例
前言 这篇文章介绍如何使用Springboot+Junit+Mockito做单元测试,案例选取撮合交易的一个类来做单元测试. 单元测试前先理解需求 要写出好的单测,必须先理解了需求,只有知道做什么才能知道怎么测.但本文主要讲mockito的用法,无需关注具体需求.所以本节略去具体的需求描述. 隔离外部依赖 Case1. 被测类中被@Autowired 或 @Resource 注解标注的依赖对象,如何控制其返回值 以被测方法 MatchingServiceImpl.java的matching(Ma
-
Spring+Junit4进行接口测试实例代码
本文研究的主要是Spring+Junit4进行接口测试的一个相关实例,具体实现代码如下. 1.配置pom.xml <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.3.2.RELEASE</version> </dependency> <depende
-
详解springboot中junit回滚
springboot中使用junit编写单元测试,并且测试结果不影响数据库. pom引入依赖 如果是IDE生成的项目,该包已经默认引入. <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency&g
-
SSM框架中测试单元的使用 spring整合Junit过程详解
测试类中的问题和解决思路 问题 在测试类中,每个测试方法都有以下两行代码: ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml"); IAccountService as = ac.getBean("accountService",IAccountService.class); 这两行代码的作用是获取容器,如果不写的话,直接会提示空指针异常.所以又不能轻易删掉. 解决思路分析 针对
-
spring整合struts2过程详解
这篇文章主要介绍了spring整合struts2过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 首先将以下jar包加入到lib文件夹中: 基础目录: Person.java package com.gong.spring.struts2.beans; public class Person { private String username; public void setUsername(String username) { this
-
Bottle框架中的装饰器类和描述符应用详解
最近在阅读Python微型Web框架Bottle的源码,发现了Bottle中有一个既是装饰器类又是描述符的有趣实现.刚好这两个点是Python比较的难理解,又混合在一起,让代码有些晦涩难懂.但理解代码之后不由得为Python语言的简洁优美赞叹.所以把相关知识和想法稍微整理,以供分享. 正文 Bottle是Python的一个微型Web框架,所有代码都在一个bottle.py文件中,只依赖标准库实现,兼容Python 2和Python 3,而且最新的稳定版0.12代码也只有3700行左右.虽然小,但
-
Laravel框架中队列和工作(Queues、Jobs)操作实例详解
在我们的web应用中,经常会遇到这样的情况: 用户在进行了某项操作后,我们需要在后台完成一个耗时且耗费资源的任务,以对应用户的操作. 通常来说,web应用中的操作都是同步的(synchronous),即用户的操作可以立即得到回馈. 但是在以上情况下,同步等待操作结果将是灾难性的.比如用户点击了申请密码重置邮件,倘若我们让用户一直停滞在等待页面,直至邮件发送成功,那么用户体验将非常地不好,因为有时候可能需要很长的时间才能将邮件发送完成. 从另一个角度来说,如果我们服务器处于高负荷的情况,当多个用户
-
pytorch中交叉熵损失(nn.CrossEntropyLoss())的计算过程详解
公式 首先需要了解CrossEntropyLoss的计算过程,交叉熵的函数是这样的: 其中,其中yi表示真实的分类结果.这里只给出公式,关于CrossEntropyLoss的其他详细细节请参照其他博文. 测试代码(一维) import torch import torch.nn as nn import math criterion = nn.CrossEntropyLoss() output = torch.randn(1, 5, requires_grad=True) label = tor
-
在Docker中部署Spring Boot项目过程详解
微服务现在在互联网公司可谓非常流行了,之前找工作的的时候很多HR电话约面试的时候都会问对微服务是否有过接触.而微服务和Docker可以非常完美的结合,更加方便的实现微服务架构的落地.作为微服务中的代表SpringBoot框架,今天我们就来了解一下如何在Docker容器中运行一个SpringBoot应用. 创建Spring Boot程序 在这篇文章中我们将在Docker容器中运行一个简单的SpringBoot的Web应用,下面是初始时刻的pom.xml中的内容. <?xml version="
-
spring框架配置实体类复杂属性注入xml文件过程详解
spring框架是javaWeb项目中至关重要的一个框架,大多web 项目在工作层次上分为持久层.服务层.控制层.持久层(dao.mapper)用于连接数据库,完成项目与数据库中数据的传递:服务层(service)主要完成项目中各种业务(增.删.改.查),连接持久层.控制层,还和各种实体类打交道,而控制层主要和web前端页面打交道,与页面传递数据. 今天,主要介绍服务层的框架spring,也是各种整合框架最核心的框架.主要介绍spring中的一个小知识点,很难记的,那就是在spring框架对实体
-
Java的MyBatis框架中关键的XML字段映射的配置参数详解
properties 这些是外部化的,可替代的属性,这些属性也可以配置在典型的Java属性配置文件中,或者通过properties元素的子元素来传递.例如: <properties resource="org/mybatis/example/config.properties"> <property name="username" value="dev_user"/> <property name="pas
-
创建网关项目(Spring Cloud Gateway)过程详解
创建网关项目 加入网关后微服务的架构图 创建项目 POM文件 <properties> <java.version>1.8</java.version> <spring-cloud.version>Greenwich.SR3</spring-cloud.version> </properties> <dependencies> <dependency> <groupId>org.springfram
-
Springboot集成spring data elasticsearch过程详解
版本对照 各版本的文档说明:https://docs.spring.io/spring-data/elasticsearch/docs/ 1.在application.yml中添加配置 spring: data: elasticsearch: repositories: enabled: true #多实例集群扩展时需要配置以下两个参数 #cluster-name: datab-search #cluster-nodes: 127.0.0.1:9300,127.0.0.1:9301 2.添加 M
随机推荐
- jQuery 1.9.1源码分析系列(十五)动画处理之缓动动画核心Tween
- asp.net中调用Office来制作3D统计图的实例代码
- Swift开发中switch语句值绑定模式
- IE,firefox(火狐)浏览器无提示关闭窗口js实现代码小结
- PHP 和 XML: 使用expat函数(三)
- Python yield 使用浅析
- Android使用OkHttp上传图片的实例代码
- 深入理解C#中的枚举
- JavaScript实现网站访问次数统计代码
- PHP递归调用的小技巧讲解
- jQuery 源码分析笔记(3) Deferred机制
- 四川汶川发生7.6级地震_河北石家庄组图
- jQuery实现精美的多级下拉菜单特效
- jquery快捷动态绑定键盘事件的操作函数代码
- android实现微信联合登录开发示例
- Android DrawerLayout实现抽屉效果实例代码
- Python基于回溯法解决01背包问题实例
- 微信小程序实现复选框效果
- 浅谈log4j 不打印异常堆栈
- C#实现简单记事本程序