[Spring] Spring Test结合JUnit的单元测试

简介: 配置依赖文件名:pom.xml(部分) org.springframework spring-test 4.1.1.RELEASE test junit junit 4.11 test建立与src同级的测试源码目录 (test),编写测试基类。
  1. 配置依赖
    文件名:pom.xml(部分)
<!-- Spring 单元测试,需要JUint -->
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-test</artifactId>
  <version>4.1.1.RELEASE</version>
  <scope>test</scope>
</dependency>
<dependency>
  <groupId>junit</groupId>
  <artifactId>junit</artifactId>
  <version>4.11</version>
  <scope>test</scope><!-- 表示开发的时候引入,发布的时候不会加载此包 -->
</dependency>
  1. 建立与src同级的测试源码目录 (test),编写测试基类。
    BastTest类负责加载配置文件,设置事务等。之后的所有测试类都可以直接继承此类,就不需要每次都加载配置文件。
    文件名:BaseTest.java
package com.spz.spzblog.test;

import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.transaction.TransactionConfiguration;
import org.springframework.transaction.annotation.Transactional;

/**
 * 测试基类
 */
@RunWith(SpringJUnit4ClassRunner.class) //使用Spring实现的测试执行类
@ContextConfiguration({"/spring/*.xml","/mybatis/*.xml"}) //加载配置文件
//@Transactional
//@TransactionConfiguration(transactionManager = "transactionManager",defaultRollback = true)
public class BaseTest {

}

Transactional和TransactionConfiguration注解使得数据库数据不会被测试程序污染。如果在测试基类中不配置这两个注解,则需要给需要事务管理的测试方法添加事务注解。
文件名:UserTest.java

package com.spz.spzblog.test.usertest;

import com.spz.spzblog.po.User;
import com.spz.spzblog.service.UserService;
import com.spz.spzblog.test.BaseTest;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.annotation.Rollback;
import org.springframework.transaction.annotation.Transactional;

/**
 * 用户相关测试
 */
public class UserTest extends BaseTest{

    @Autowired
    private UserService userServiceImpl;

    @Test
    @Transactional//启用事务
    @Rollback(true)//方法结束自动回滚,false为不回滚
    public void aa()throws Exception{
        User user = new User();
        user.setUser_name("spz");
        user.setUser_pass("123");
        user = userServiceImpl.getUser(user);//此方法会访问数据库
        if(user != null){//搜索到该用户
            System.out.println("I find it:" + user.getUser_name());
        }else{
            System.out.println("Error!");
        }
    }
}

环境:
SpringMVC、Spring、Mybatis、Maven、IntelliJ IDEA、JDK1.8
Spring项目使用JUint进行单元测试的缺点:
http://blog.csdn.net/shan9liang/article/details/40452469
参考
http://blog.csdn.net/shan9liang/article/details/40452469

相关文章
|
1月前
|
IDE Java 测试技术
使用JUnit进行单元测试:提高Java Web应用的稳定性和可靠性
【4月更文挑战第3天】本文介绍了JUnit,一个广泛使用的Java单元测试框架,由Kent Beck和Erich Gamma创建。JUnit核心特性包括注解、断言、测试套件、测试监听器和异常测试。在Java Web应用中,单元测试主要针对模型层。使用JUnit测试涉及设置环境、编写测试类、标记测试方法及运行和分析结果。单元测试能提早发现问题、简化调试、保证代码质量、促进重构并作为实时文档。掌握JUnit对提升软件质量和效率至关重要。
|
2月前
|
Java 测试技术 Spring
Spring Boot 基于 JUnit 5 实现单元测试
Spring Boot 基于 JUnit 5 实现单元测试
28 0
|
1月前
|
Java 测试技术 程序员
junit单元测试
junit单元测试
|
2天前
|
测试技术
测试基础 Junit单元测试框架
测试基础 Junit单元测试框架
10 2
测试基础 Junit单元测试框架
|
10天前
|
Java 测试技术 Maven
Spring Boot单元测试报错java.lang.IllegalStateException: Could not load TestContextBootstrapper [null]
Spring Boot单元测试报错java.lang.IllegalStateException: Could not load TestContextBootstrapper [null]
|
15天前
|
安全 Java 测试技术
Spring Boot 自动化单元测试类的编写过程
企业开发不仅要保障业务层与数据层的功能安全有效,也要保障表现层的功能正常。但是我们一般对表现层的测试都是通过postman手工测试的,并没有在打包过程中代码体现表现层功能被测试通过。那么能否在测试用例中对表现层进行功能测试呢?答案是可以的,我们可以使用MockMvc来实现它。
42 0
|
16天前
|
Java 测试技术 开发者
[AIGC] 使用Spring Boot进行单元测试:一份指南
[AIGC] 使用Spring Boot进行单元测试:一份指南
|
21天前
|
存储 安全 Java
第9章 Spring Security 的测试与维护 (2024 最新版)(下)
第9章 Spring Security 的测试与维护 (2024 最新版)
21 1
|
21天前
|
安全 Java 测试技术
第9章 Spring Security 的测试与维护 (2024 最新版)(上)
第9章 Spring Security 的测试与维护 (2024 最新版)
23 0
|
24天前
|
Java 测试技术 API
使用JUnit进行Java单元测试
【4月更文挑战第16天】本文介绍了如何使用JUnit进行Java单元测试。JUnit是一个由Erich Gamma和Kent Beck创建的开源Java测试框架,用于简化测试用例编写并自动执行测试。文章涵盖了JUnit的基本结构,如使用`@Test`注解标记测试方法,以及断言方法如`assertEquals`和`assertTrue`来验证测试结果。此外,还讨论了测试套件的创建,用于组合运行多个测试类,并介绍了模拟对象的概念,允许开发者使用Mockito等库来模拟依赖对象。学习和应用JUnit能提升代码质量并确保软件稳定性。