一、软件下载地址(本人使用的spring是2.5版本)
1、spring-test.jar下载地址,我的是2.5版本
http://grepcode.com/snapshot/repo1.maven.org/maven2/org.springframework/spring-test/2.5
2、junit需要4.4版本,过高会出现java.lang.ClassNotFoundException: org.junit.Assume$AssumptionViolatedException异常
http://sourceforge.net/projects/junit/files/junit/4.4/junit-4.4.jar/download
二、测试内容
1、使用基类,applicationContext-test其实跟applicationContext.xml一模一样,只是把他放入test包中
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.AbstractTransactionalJUnit4SpringContextTests;
//告诉他我们需要载入的配置文件,例如@ContextConfiguration(locations={“xx/yy/beans1.xml”,” xx/yy/beans2.xml”})
@ContextConfiguration(locations={"/applicationContext-test.xml"})
public class BaseServiceTest extends AbstractTransactionalJUnit4SpringContextTests {
}
ps:在我引入多个数据源的时候,上面运行会报错。主要原因是spring默认会使用type去匹配你注入的数据源,我的两个数据源类名是一样的,只是绑定的id不一样,spring不知道AbstractTransactionalJUnit4SpringContextTests注入所需的是哪个bean,所以这里需要使用
@Autowired
public void setDataSource(@Qualifier("cqDataSource") DataSource cqDataSource) {
super.setDataSource(cqDataSource);
}
2、测试用例
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;
import junit.framework.Assert;
import org.junit.Before;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.PreparedStatementCreator;
import org.springframework.jdbc.support.GeneratedKeyHolder;
import org.springframework.jdbc.support.KeyHolder;
//默认会继承父类的中的spring配置文件,如果你想自己配置,重新写,如
//@ContextConfiguration(locations={"base-context.xml"})
public class NetStandardServiceTest extends BaseServiceTest {
//如果不使用注解,就按照之前的方式get和set的方法
@Autowired
private NetStandardService netStandardService;
private int netStandardId;
@Test//保存测试
public void saveTest() {
String name = "haiji";
NetStandard ns = new NetStandard();
ns.setName(name);
this.netStandardService.save(ns);
int key = ns.getNetStandardId();
NetStandard nst = this.netStandardService.get(NetStandard.class, key);
Assert.assertEquals("网络制式保存出错", name, nst.getName());
Assert.assertEquals("网络制式保存出错", "1", nst.getName());
}
//准备数据
@Before//准备测试数据,这里的before是跟其他test方法放入同一个事务中,若不想同一个事务,可以使用@BeforeTransaction
public void prepareTestData() {
final String sql = "insert into tbl_net_standard(name) values('1234')";
simpleJdbcTemplate.update(sql);
KeyHolder keyHolder = new GeneratedKeyHolder();
simpleJdbcTemplate.getJdbcOperations().update(
new PreparedStatementCreator() {
public PreparedStatement createPreparedStatement(Connection conn)
throws SQLException {
PreparedStatement ps = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
return ps;
}
}, keyHolder);
netStandardId = keyHolder.getKey().intValue();//①-1 记录测试数据的id
}
@Test//查询测试
public void getTest() {
NetStandard ns = this.netStandardService.get(NetStandard.class, this.netStandardId);
Assert.assertEquals("查询出错", "1234", ns.getName());
Assert.assertEquals("查询出错", "1", ns.getName());
}
@Test//更新测试
public void updateTest() {
String updateName = "海鸡";
NetStandard ns = this.netStandardService.get(NetStandard.class, this.netStandardId);
ns.setName(updateName);
this.netStandardService.update(ns);
ns = this.netStandardService.get(NetStandard.class, this.netStandardId);
Assert.assertEquals("更新名称出错", updateName, ns.getName());
Assert.assertEquals("更新名称出错", "1234", ns.getName());
Assert.assertEquals("更新Id出错", this.netStandardId, ns.getNetStandardId().intValue());
}
@Test//删除测试
public void deleteTest() {
this.netStandardService.delete(NetStandard.class, this.netStandardId);
NetStandard ns = this.netStandardService.get(NetStandard.class, this.netStandardId);
Assert.assertEquals("删除出错", Object.class, ns);
Assert.assertNull("删除出错", ns);
}
}
3、对于新版本的spring(3.0后),你可以查看此处文档,http://static.springsource.org/spring/docs/3.0.0.RELEASE/reference/htmlsingle/spring-framework-reference.html#testcontext-framework你可以发现这里是使用这种更加方便的方式:
package com.blog.service;
import junit.framework.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({"/applicationContextTest.xml"})
@TransactionConfiguration(transactionManager="transactionManager", defaultRollback=true)
@Transactional
public class BlogServiceTest{
@Before
public void setup() {
}
@Test
public void testAddBlog() {
Assert.fail("no test");
}
}
请注意上面的
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({"/applicationContextTest.xml"})
@TransactionConfiguration(transactionManager="transactionManager", defaultRollback=true)这个在配置文件中有定义事务
如果你想要注入其他src的对象,直接使用@resource方式注入进来。
参考内容:
http://www.ibm.com/developerworks/cn/java/j-lo-spring25-test/
出现过一下问题:http://oraclestudy.iteye.com/blog/1232857
今天部署项目的时候顺便把一些依赖用新版本的jar替换了,其他还好就是MYSQL的驱动出了问题。
原来用的是5.1.5的包,替换成5.1.17之后,如下生成主键的代码都会报错:
- ps = getConnection().prepareStatement(sql.toString());
- ....
- rs = ps.getGeneratedKeys();
Generated keys not requested. You need to specify Statement.RETURN_GENERATED_KEYS to Statement.executeUpdate() or Connection.prepareStatement().
据说要修改成这样才不会报错:
- ps = getConnection().prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);
- ...
- rs = ps.getGeneratedKeys();
原因是:貌似从5.1.7版本之后的mysql-connector增加了返回GeneratedKeys的条件,如果需要返回GeneratedKeys,则PreparedStatement需要显示添加一个参数Statement.RETURN_GENERATED_KEYS。不过直接报错,不向下兼容也太不厚道了。
相关Bug信息:http://bugs.mysql.com/bug.php?id=41448
参考:http://www.itsmile.net/blog/article_show/20/273752
分享到:
相关推荐
本示例代码聚焦于使用JUnit进行Spring测试,这是一项核心的Java测试框架,广泛用于编写可重复的、独立的单元测试。 首先,让我们深入理解Spring测试的基本概念。Spring测试支持主要由`spring-test`模块提供,它包含...
在进行Spring测试时,开发者通常会使用`@RunWith(SpringRunner.class)`来启用Spring的测试支持,然后通过`@SpringBootTest`或更具体的测试注解来指定测试范围。`@Autowired`注解可以帮助注入需要的bean,而`@Mock...
Spring测试框架是Spring生态系统中的重要组成部分,它为开发者提供了对Spring应用进行单元测试、集成测试以及端到端测试的强大支持。这个压缩包“Spring测试框架.rar”包含了与使用Spring 2.5 TestContext测试框架...
Spring测试jar包是针对Spring框架开发的一个重要工具,主要用于帮助开发者在Spring环境下对代码进行单元测试、集成测试以及端到端测试。这个jar包包含了所有必要的类和库,使得测试过程更加便捷和高效。 首先,...
"孔浩组织类型—spring测试类实现3"这个主题可能涵盖了如何在Spring中创建和执行测试用例的高级概念,尤其是对于复杂的项目结构。这里我们将深入探讨Spring测试类的实现细节。 首先,Spring测试框架提供了多种测试...
在ACCP6.0的Spring测试题中,可能包含以下几个关键知识点: 1. **依赖注入**:这是Spring的核心特性之一,通过XML配置文件或注解实现对象间的依赖关系,使代码更加松耦合。测试题可能会让你创建不同类型的bean定义...
本话题主要围绕"孔浩组织类型—spring测试类实现"来展开,将详细介绍如何创建和使用Spring测试类。 首先,Spring测试类的实现通常依赖于Spring Test和JUnit这两个库。Spring Test提供了与Spring框架集成的测试支持...
对于提供的压缩包文件"spring测试需要的jar包",它很可能包含了Spring框架、HikariCP、Junit以及可能的其他依赖,如数据库驱动等。这些jar包是运行和测试Spring应用所必需的。确保将这些库添加到项目的类路径中,以...
本文将详细探讨"spring测试类"这一主题,基于标题"孔浩组织类型—spring测试类实现2"及提供的描述链接,我们将深入理解如何在Spring中创建和执行测试。 首先,Spring提供了多种测试支持,包括`@RunWith...
在这个“我做的SPRING测试”项目中,我们可以探讨Spring框架的多个关键知识点,包括但不限于基本概念、配置方式、核心组件以及实战应用。 1. **Spring框架概述**:Spring是一个轻量级的Java框架,旨在减少应用程序...
"spring测试jar"指的是包含这些测试支持的 JAR 文件,通常包括 `spring-test` 和 `junit` 相关的库。 1. **Spring Test**:这是 Spring 框架的一个模块,提供了一组工具和类,帮助开发者编写和运行针对 Spring 应用...
例如,使用`@RunWith(SpringRunner.class)`注解启动Spring测试环境,`@SpringBootTest`注解可以加载整个Spring应用上下文,`@MockBean`或`@SpyBean`则可以帮助我们创建模拟对象进行隔离测试。 在“spring 1”这个...
在这个"spring测试例子"中,我们将深入探讨Spring如何支持测试,以及如何通过实际的"demo"来理解和实践这些测试技术。 首先,Spring提供了多种测试支持,包括Spring Test、Spring Boot Test和Mockito等库,可以帮助...
spring单元测试包spring单元测试包spring单元测试包spring单元测试包spring单元测试包
1. **Spring测试模块** Spring框架提供了内置的测试支持,包括`spring-test`模块,它为Spring应用提供了全面的测试工具。这个模块包含了JUnit和Mockito等测试库的整合,使得开发者能够方便地编写针对Spring组件的...
2. **测试配置**:在Spring测试中,你可以使用`@ContextConfiguration`注解来指定配置文件或带有`@Configuration`注解的类,这些配置将在测试中加载。这使得测试环境可以根据需求配置,比如使用不同的数据源或不同的...
在Spring框架中,`spring-test`模块是专门为测试而设计的,它提供了对Spring应用程序上下文的支持,使得在测试环境中可以方便地加载和管理bean。`spring-test-4.2.4.RELEASE.jar`是这个模块的一个特定版本,发布于...
测试httpclient,主要测试json参数的接口,包括get请求和post请求。
在测试类上使用`@RunWith(SpringRunner.class)`注解启用Spring测试支持,并使用`@ContextConfiguration`指定Spring配置文件的位置。 2. **创建MockMVC对象**:使用`MockMvcBuilders.standaloneSetup()`或`...