`

spring测试

 
阅读更多

一、软件下载地址(本人使用的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之后,如下生成主键的代码都会报错:


Java代码 
  1. ps = getConnection().prepareStatement(sql.toString());    
  2. ....  
  3. rs = ps.getGeneratedKeys();  


Generated keys not requested. You need to specify Statement.RETURN_GENERATED_KEYS to Statement.executeUpdate() or Connection.prepareStatement().



据说要修改成这样才不会报错:


Java代码 
  1. ps = getConnection().prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);   
  2. ...  
  3. 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

分享到:
评论

相关推荐

    spring测试示例代码

    本示例代码聚焦于使用JUnit进行Spring测试,这是一项核心的Java测试框架,广泛用于编写可重复的、独立的单元测试。 首先,让我们深入理解Spring测试的基本概念。Spring测试支持主要由`spring-test`模块提供,它包含...

    Spring 测试jar

    在进行Spring测试时,开发者通常会使用`@RunWith(SpringRunner.class)`来启用Spring的测试支持,然后通过`@SpringBootTest`或更具体的测试注解来指定测试范围。`@Autowired`注解可以帮助注入需要的bean,而`@Mock...

    Spring测试框架.rar

    Spring测试框架是Spring生态系统中的重要组成部分,它为开发者提供了对Spring应用进行单元测试、集成测试以及端到端测试的强大支持。这个压缩包“Spring测试框架.rar”包含了与使用Spring 2.5 TestContext测试框架...

    spring测试jar包

    Spring测试jar包是针对Spring框架开发的一个重要工具,主要用于帮助开发者在Spring环境下对代码进行单元测试、集成测试以及端到端测试。这个jar包包含了所有必要的类和库,使得测试过程更加便捷和高效。 首先,...

    孔浩组织类型—spring测试类实现3

    "孔浩组织类型—spring测试类实现3"这个主题可能涵盖了如何在Spring中创建和执行测试用例的高级概念,尤其是对于复杂的项目结构。这里我们将深入探讨Spring测试类的实现细节。 首先,Spring测试框架提供了多种测试...

    accp6.0 spring测试题

    在ACCP6.0的Spring测试题中,可能包含以下几个关键知识点: 1. **依赖注入**:这是Spring的核心特性之一,通过XML配置文件或注解实现对象间的依赖关系,使代码更加松耦合。测试题可能会让你创建不同类型的bean定义...

    孔浩组织类型—spring测试类实现

    本话题主要围绕"孔浩组织类型—spring测试类实现"来展开,将详细介绍如何创建和使用Spring测试类。 首先,Spring测试类的实现通常依赖于Spring Test和JUnit这两个库。Spring Test提供了与Spring框架集成的测试支持...

    spring测试hikari所需jar包

    对于提供的压缩包文件"spring测试需要的jar包",它很可能包含了Spring框架、HikariCP、Junit以及可能的其他依赖,如数据库驱动等。这些jar包是运行和测试Spring应用所必需的。确保将这些库添加到项目的类路径中,以...

    孔浩组织类型—spring测试类实现2

    本文将详细探讨"spring测试类"这一主题,基于标题"孔浩组织类型—spring测试类实现2"及提供的描述链接,我们将深入理解如何在Spring中创建和执行测试。 首先,Spring提供了多种测试支持,包括`@RunWith...

    我做的SPRING测试

    在这个“我做的SPRING测试”项目中,我们可以探讨Spring框架的多个关键知识点,包括但不限于基本概念、配置方式、核心组件以及实战应用。 1. **Spring框架概述**:Spring是一个轻量级的Java框架,旨在减少应用程序...

    spring测试jar

    "spring测试jar"指的是包含这些测试支持的 JAR 文件,通常包括 `spring-test` 和 `junit` 相关的库。 1. **Spring Test**:这是 Spring 框架的一个模块,提供了一组工具和类,帮助开发者编写和运行针对 Spring 应用...

    spring 的简单小测试

    例如,使用`@RunWith(SpringRunner.class)`注解启动Spring测试环境,`@SpringBootTest`注解可以加载整个Spring应用上下文,`@MockBean`或`@SpyBean`则可以帮助我们创建模拟对象进行隔离测试。 在“spring 1”这个...

    spring测试例子

    在这个"spring测试例子"中,我们将深入探讨Spring如何支持测试,以及如何通过实际的"demo"来理解和实践这些测试技术。 首先,Spring提供了多种测试支持,包括Spring Test、Spring Boot Test和Mockito等库,可以帮助...

    spring单元测试包

    spring单元测试包spring单元测试包spring单元测试包spring单元测试包spring单元测试包

    spring-demo15-测试.zip

    1. **Spring测试模块** Spring框架提供了内置的测试支持,包括`spring-test`模块,它为Spring应用提供了全面的测试工具。这个模块包含了JUnit和Mockito等测试库的整合,使得开发者能够方便地编写针对Spring组件的...

    Spring中进行集成测试

    2. **测试配置**:在Spring测试中,你可以使用`@ContextConfiguration`注解来指定配置文件或带有`@Configuration`注解的类,这些配置将在测试中加载。这使得测试环境可以根据需求配置,比如使用不同的数据源或不同的...

    spring整合单元测试Junit开发包

    在Spring框架中,`spring-test`模块是专门为测试而设计的,它提供了对Spring应用程序上下文的支持,使得在测试环境中可以方便地加载和管理bean。`spring-test-4.2.4.RELEASE.jar`是这个模块的一个特定版本,发布于...

    spring测试HTTPclient来的类

    测试httpclient,主要测试json参数的接口,包括get请求和post请求。

    spring MVC junit 单元测试(controller)

    在测试类上使用`@RunWith(SpringRunner.class)`注解启用Spring测试支持,并使用`@ContextConfiguration`指定Spring配置文件的位置。 2. **创建MockMVC对象**:使用`MockMvcBuilders.standaloneSetup()`或`...

Global site tag (gtag.js) - Google Analytics