`

Spring标注开发的Junit测试

 
阅读更多

       上一篇就针对spring开发时的2种方式给予Junit测试的一个简单说明。这篇为了给新人们一个明确的说明,我就直接符上代码,供大家参考;

1.实体类:

package com.tta.model;

public class User implements java.io.Serializable {
	private Integer id;
	private String name;
	private Integer age;
	private String address;

	public User() {
	}

	public User(Integer age, String address) {
		this.age = age;
		this.address = address;
	}

	public User(String name, Integer age, String address) {
		this.name = name;
		this.age = age;
		this.address = address;
	}

	public Integer getId() {
		return this.id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getName() {
		return this.name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Integer getAge() {
		return this.age;
	}

	public void setAge(Integer age) {
		this.age = age;
	}

	public String getAddress() {
		return this.address;
	}

	public void setAddress(String address) {
		this.address = address;
	}

}

 实体orm映射文件:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
    <class name="com.tta.model.User" table="tb_model_user" >
        <id name="id" type="integer">
            <column name="id" />
            <generator class="native"></generator>
        </id>
        <property name="name" type="string">
            <column name="name" length="20" />
        </property>
        <property name="age" type="integer">
            <column name="age" not-null="true" />
        </property>
        <property name="address" type="string">
            <column name="address" length="50" not-null="true" />
        </property>
    </class>
</hibernate-mapping>

 2.服务层代码:

package com.tta.svc;

import java.util.List;

import com.tta.model.User;

public interface IUserService {
	
	void saveUser(User u);
	
	void deleteUser(User u);
	
	void updateUser(User u);
	
	User findUserById(int userId);
	
	List<User> findUsers();
}

 

package com.tta.svc.impl;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.tta.dao.IUserDao;
import com.tta.model.User;
import com.tta.svc.IUserService;

@Service("userService")
@Transactional
public class UserService implements IUserService {
	private IUserDao useDao;
	@Override
	public void deleteUser(User u) {
		useDao.deleteUser(u);
	}

	@Override
	public User findUserById(int userId) {
		return useDao.findUserById(userId);
	}

	@Override
	public List<User> findUsers() {
		return useDao.findUsers();
	}

	@Override
	public void saveUser(User u) {
		useDao.saveUser(u);
	}

	@Override
	public void updateUser(User u) {
		useDao.updateUser(u);
	}

	public void setUseDao(IUserDao useDao) {
		this.useDao = useDao;
	}

}

 

3.数据操作层:

package com.tta.dao;

import java.util.List;

import com.tta.model.User;

public interface IUserDao {
	
	void saveUser(User u);
	
	void deleteUser(User u);
	
	void updateUser(User u);
	
	User findUserById(int userId);
	
	List<User> findUsers();
}

 

package com.tta.dao.impl;

import java.util.List;

import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import org.springframework.stereotype.Repository;

import com.tta.dao.IUserDao;
import com.tta.model.User;

@Repository("userDao")
public class UserDao extends HibernateDaoSupport implements IUserDao {
	@Autowired
	public void setSuperSessionFactory(SessionFactory sessionFactory) {
		super.setSessionFactory(sessionFactory);
	}
	
	@Override
	public void deleteUser(User u) {
		getHibernateTemplate().delete(u);
	}

	@Override
	public User findUserById(int userId) {
		User u = new User();
		u.setId(userId);
		return (User) getHibernateTemplate().findByExample(u).get(0);
	}

	@Override
	public List<User> findUsers() {
		//Model User
//		return getHibernateTemplate().find("from User");
		//View User
		return getHibernateTemplate().find("select new User(age,address) from User");
	}

	@Override
	public void saveUser(User u) {
		getHibernateTemplate().save(u);
	}

	@Override
	public void updateUser(User u) {
		getHibernateTemplate().merge(u);
	}
	
}

 

4.spring配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
	http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
	http://www.springframework.org/schema/context
	http://www.springframework.org/schema/context/spring-context-2.5.xsd">
    
    <context:annotation-config />
    
	<context:component-scan base-package="com.tta.*" />

	<bean id="dataSource"
		class="org.apache.commons.dbcp.BasicDataSource">
		<property name="driverClassName"
			value="com.mysql.jdbc.Driver">
		</property>
		<property name="url" value="jdbc:mysql://127.0.0.1:3306/mbpa"></property>
		<property name="username" value="root"></property>
		<property name="password" value="sainwind"></property>
	</bean>
	<bean id="sessionFactory"
		class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
		<property name="dataSource">
			<ref bean="dataSource"></ref>
		</property>
		<property name="hibernateProperties">
			<props>
				<prop key="hibernate.dialect">
					org.hibernate.dialect.MySQLDialect
				</prop>
			</props>
		</property>
		<property name="mappingResources">
			<list>
				<value>com/tta/model/User.hbm.xml</value>
			</list>
		</property>
	</bean>
</beans>

 

 

 

最后,贴上我们的测试类:

package com.tta.svc.test;

import java.util.List;

import org.junit.Test;
import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.tta.model.User;
import com.tta.svc.IUserService;
import com.tta.svc.impl.UserService;

public class UserTest {
	private static ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
	private static AutowireCapableBeanFactory autoBeanFactory = applicationContext.getAutowireCapableBeanFactory();
	private static IUserService svc = (UserService)autoBeanFactory.getBean("userService");
//	@Test
	public void save(){
		User u = new User(22,"zhangsan");
		svc.saveUser(u);
	}
//	@Test
	public void delete(){
		svc.deleteUser(svc.findUserById(1));
	}
//	@Test
	public void update(){
		User u = svc.findUserById(1);
		u.setAddress("上海市徐汇区零陵路123号");
		u.setAge(35);
		u.setName("赵冰");
		svc.updateUser(u);
	}
	@Test
	public void getUsers(){
		List<User> users = svc.findUsers();
		for(User u : users){
			System.out.println("name : "+u.getName()+" address:"+u.getAddress());
		}
	}
}

 有问题可以一起探讨啊。希望大家多多指点。

 

分享到:
评论

相关推荐

    spring+hibernate整合列子,用junit测试增删改查都实现(MySQL包含表)

    接下来,JUnit测试部分,我们需要创建测试类,导入JUnit库,并使用`@Test`注解标注测试方法。每个测试方法模拟一次业务操作,如添加一个新记录、查询特定记录、修改记录或删除记录。测试类通常会注入相应的DAO,调用...

    软件测试 Junit教程

    - **STA2JUnit Framework.ppt:** 另一份PPT,可能更侧重于介绍JUnit与其他测试框架的集成,如Spring Test或Mockito,以及如何在大型项目中使用JUnit。 通过学习这些资源,开发者可以熟练掌握JUnit,从而在软件开发...

    详解Spring Boot Junit单元测试

    详解Spring Boot Junit单元测试 本篇文章主要介绍了Spring Boot Junit单元测试的重要性和使用方法。单元测试是软件测试中的一种测试方法,通过编写测试用例来验证代码的正确性和稳定性。在Spring Boot项目中,使用...

    Spring框架测试.zip

    Spring框架是Java应用程序开发中的一个核心工具,它提供了一个全面的编程和配置模型,促进了松散耦合、可测试和模块化的应用设计。在本压缩包"Spring框架测试.zip"中,包含的是用于进行Spring框架单元测试的重要组件...

    Springboot整合junit过程解析

    在软件开发领域中,测试是一个非常重要的环节。JUnit 是一个流行的 Java 单元测试框架,而 SpringBoot 是一个基于 Java 的 Web 应用程序框架。今天,我们将讨论如何将 JUnit 与 SpringBoot 进行整合,以便更好地进行...

    Spring5.0中文开发手册

    - **1.2.2.6 Test**:提供支持测试Spring组件的JUnit和TestNG集成。 - **1.2.3 Usage Scenarios 使用场景** - **1.2.3.1 Dependency Management and Naming Conventions 依赖关系管理和命名约定** - 介绍了如何...

    spring配置实例详解代码和测试

    `@Configuration`标注的类表示这是一个配置类,`@Bean`注解的方法会返回一个被Spring管理的Bean实例。 在依赖配置中,我们经常需要处理Bean之间的依赖关系。Spring支持构造器注入和setter注入两种方式。构造器注入...

    Spring框架是在2003年兴起的一门轻量级的JAVAEE框架技术 Spring框架学习资料第五天

    本篇将主要探讨Spring框架的几个核心知识点,包括事务传播属性、注解式事务管理、注解式开发、SSM(Spring+SpringMVC+MyBatis)集成开发流程以及Spring与JUnit测试的整合。 **一、事务传播属性失效问题及解决** ...

    测试模块需求分析文档v0.11

    Spring的SpringTest模块提供了一种基于JUnit的测试解决方案,可以为测试类提供IOC容器。因此,我们认为这是一个可行的技术路线。 3. 测试模块设计 测试模块主要由4个类组成,包括运行器类、测试类、日志类等。这些...

    用Maven搭建Spring+Spring MVC+Hibernate框架

    5. 其他可能的辅助库,如JUnit进行单元测试,Servlet API和JSTL用于Web开发。 配置好`pom.xml`后,执行`mvn install`命令,Maven将下载所有依赖并构建项目。接下来,我们需要创建Spring的配置文件,一般为`...

    Spring 5.0.0框架参考文档中文部分版

    Spring支持使用JUnit等测试框架,同时也提供了Mock对象、测试切面等工具。 Spring框架支持多版本的JDK和JavaEE。在Spring 5.0.0中,引入了对JDK 8+的特性支持,如Lambda表达式和新的时间API。Spring 5的发布也标志...

    测试模块需求分析文档1

    参考Spring的SpringTest,它利用@RunWith注解在JUnit中集成Spring的IOC容器,为测试提供必要的上下文。因此,采用类似策略为BladeTest设计解决方案是可行的。 测试模块设计: 测试模块由四个主要类组成,包括运行...

    java毕业设计&课设-spring源码深度解析+注解开发全套视频教程(视频+源码).doc

    - **单元测试编写**:介绍JUnit、Mockito等工具的使用,提高代码质量。 - **集成测试**:如何使用Spring Test或其他测试框架进行集成测试,确保系统整体运行正常。 #### 五、资源获取与学习建议 - **资源获取**:...

    CXF接口Spring+Hibernate的添加完整版

    6. **测试与调试**:为了确保接口功能的正确性,通常会编写JUnit测试用例,模拟客户端调用服务进行添加操作,并验证数据是否成功存储到数据库中。这一步骤对于理解整个系统的运作机制非常重要。 通过这个示例,初学...

    Spring MVC3和Hibernate3整合的源码

    6. **测试与调试**:整合后的项目应该包含单元测试和集成测试,例如使用JUnit和Mockito进行Service层的单元测试,以及使用Spring Test和Hibernate Test进行整合测试,确保各个组件协同工作。 7. **应用结构**:一个...

    spring mvc过程详解

    3. **单元测试**:Spring MVC 的控制器可以轻松地与 JUnit 结合进行单元测试,无需启动整个应用环境即可测试控制器的功能。 #### 六、Spring MVC 配置文件详解 Spring MVC 的配置文件通常包含了以下几个关键部分:...

    无涯教程(LearnFk)-Spring-Boot教程完整离线版.pdf

    对于测试,Spring Boot也提供了spring-boot-starter-test启动器,该启动器集成了JUnit、Hamcrest和Mockito等库,便于开发者编写测试用例。 Spring Boot的起步依赖遵循一个命名规则,即spring-boot-starter-加上应用...

    spring-mybatis小示例

    - **Test类**:可能包含JUnit测试用例,用来验证Spring和MyBatis的集成是否正常,例如测试数据的增删改查操作。 通过这个小示例,开发者可以学习到如何配置Spring和MyBatis的环境,编写SQL语句,以及如何将它们...

    Spring MVC 教程,快速入门,深入分析

    单元测试在软件开发中不可或缺,对于Spring MVC中的Action,可以通过JUnit进行单元测试。转发与重定向是Web开发中常用的两种请求处理方式,Spring MVC提供了简单的方法来实现带参数的重定向。 处理Ajax请求也是...

Global site tag (gtag.js) - Google Analytics