Spring 单元测试(Junit)

简介: Spring 单元测试(Junit)


  • 单元测试(Unit Test),是一段自动化的代码,用来调动被测试的方法,而后验证基于该方法或类的逻辑行为的一些假设。单元测试几乎总是用单元测试框架来写的。它写起来很顺手,运行起来不费时。它是全自动的、可信赖的、可读性强的和可维护的。
  • 和数据库相关的单元测试,可以设定自动回滚机制,不给数据库造成脏数据。或者对单元测试产生的数据有明确的前后缀标识。

在Spring的框架下,单元测试方法。

  1. 手动加载Spring的配置文件,并启动Spring容器
  2. 使用Spring中对Junit框架的整合功能

前提:

除了Junit4和Spring的jar包,还需要spring-test.jar

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-test</artifactId>
    <version>3.1.1.RELEASE</version>
</dependency>

方法一:

  1. 注解加载配置文件
private AreaService service;
protected ApplicationContext context;
@Before
public void init(){
  //context = new FileSystemXmlApplicationContext( new String[]{"classpath:applicationContext.xml" ,"classpath:mybatis-config.xml"});
  context = new ClassPathXmlApplicationContext("spring/applicationContext.xml");
  service = (AreaService) context.getBean("areaService");
}
@Test
public void Test(){
  service.query();
}
  1. 静态代码块加载配置文件
private AreaService service;
//静态代码块加载
static{
  //context = new FileSystemXmlApplicationContext("applicationContext.xml");
  //context = new ClassPathXmlApplicationContext(new String[]{"classpath:applicationContext.xml","classpath:/spring/application*.xml"});
  ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
  service = (AreaService) context.getBean("areaService");
}
//main方法执行测试
@SuppressWarnings("resource")
public static void main(String[] args) {
    try {
    service.do();
  } catch (BizException e){
    e.printStackTrace();
  }
}
  1. main函数中执行spring的代码
    脱离Tomcat容器在单独的java application的main函数中初始化spring
public static void main(String[] args){
  //手动加载spring的配置文件,并启动spring容器
  /*GenericXmlApplicationContext context = new GenericXmlApplicationContext();
  context.setValidating(false);
  context.load("classpath*:applicationContext*.xml");
  context.refresh();*/
  ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
  //context.start();
  ReadDao fqa = (ReadDao) context.getBean("readDao");
  fqa.do();
}

方法二: 全注解

@RunWith(SpringJUnit4ClassRunner.class)
//@ContextConfiguration需要配上spring的配置文件,这样就可以在测试类中使用注解简单的注入需要的bean了。简单高效。
@ContextConfiguration({"classpath:applicationContext.xml"})
public class ReadDaoImplTest{
  @Autowired
  private AreaService areaService;
  @Resource
  private ReadDao readDao;
  @Test
  public void test(){
    areaService.query();
  }
  @Test
  public void getListTest(){
    List<Client> clientList = readDao.getList("client.test",null);    
    for(Client c:clientList){
      System.out.println(c.getVersionNum());
      try {
        // 断言:判断z==6,
        assertEquals(6, z);
        //断言:判断z<3
        assertTrue(z<3);
      } catch (BizException e) {
        e.printStackTrace();
      }
    }
  }
}

解释下用到的注解:

@RunWith:用于指定junit运行环境

@ContextConfiguration:用于指定spring配置环境

@TransactionConfiguration:用于配置事务

@Transactional表示所有类下所有方法都使用事务


相关文章
|
1月前
|
安全 Java 测试技术
《深入理解Spring》单元测试——高质量代码的守护神
Spring测试框架提供全面的单元与集成测试支持,通过`@SpringBootTest`、`@WebMvcTest`等注解实现分层测试,结合Mockito、Testcontainers和Jacoco,保障代码质量,提升开发效率与系统稳定性。
|
5月前
|
人工智能 Java 测试技术
Spring Boot 集成 JUnit 单元测试
本文介绍了在Spring Boot中使用JUnit 5进行单元测试的常用方法与技巧,包括添加依赖、编写测试类、使用@SpringBootTest参数、自动装配测试模块(如JSON、MVC、WebFlux、JDBC等),以及@MockBean和@SpyBean的应用。内容实用,适合Java开发者参考学习。
620 0
|
1月前
|
Java 测试技术 数据库连接
【SpringBoot(四)】还不懂文件上传?JUnit使用?本文带你了解SpringBoot的文件上传、异常处理、组件注入等知识!并且带你领悟JUnit单元测试的使用!
Spring专栏第四章,本文带你上手 SpringBoot 的文件上传、异常处理、组件注入等功能 并且为你演示Junit5的基础上手体验
828 3
|
4月前
|
Java 测试技术 Spring
简单学Spring Boot | 博客项目的测试
本内容介绍了基于Spring Boot的博客项目测试实践,重点在于通过测试驱动开发(TDD)优化服务层代码,提升代码质量和功能可靠性。案例详细展示了如何为PostService类编写测试用例、运行测试并根据反馈优化功能代码,包括两次优化过程。通过TDD流程,确保每项功能经过严格验证,增强代码可维护性与系统稳定性。
235 0
|
5月前
|
安全 Java 测试技术
说一说 Spring Security 中的单元测试
我是小假 期待与你的下一次相遇 ~
105 1
|
10月前
|
Java 测试技术 应用服务中间件
Spring Boot 如何测试打包部署
本文介绍了 Spring Boot 项目的开发、调试、打包及投产上线的全流程。主要内容包括: 1. **单元测试**:通过添加 `spring-boot-starter-test` 包,使用 `@RunWith(SpringRunner.class)` 和 `@SpringBootTest` 注解进行测试类开发。 2. **集成测试**:支持热部署,通过添加 `spring-boot-devtools` 实现代码修改后自动重启。 3. **投产上线**:提供两种部署方案,一是打包成 jar 包直接运行,二是打包成 war 包部署到 Tomcat 服务器。
285 10
|
Java 测试技术 Spring
spring依赖注入单元测试:expected single matching bean but found 2
异常信息:org.springframework.beans.factory.UnsatisfiedDependencyException: Caused by: org.springframework.
1716 0
|
4月前
|
Java Spring 容器
SpringBoot自动配置的原理是什么?
Spring Boot自动配置核心在于@EnableAutoConfiguration注解,它通过@Import导入配置选择器,加载META-INF/spring.factories中定义的自动配置类。这些类根据@Conditional系列注解判断是否生效。但Spring Boot 3.0后已弃用spring.factories,改用新格式的.imports文件进行配置。
881 0
|
1月前
|
JavaScript Java Maven
【SpringBoot(二)】带你认识Yaml配置文件类型、SpringMVC的资源访问路径 和 静态资源配置的原理!
SpringBoot专栏第二章,从本章开始正式进入SpringBoot的WEB阶段开发,本章先带你认识yaml配置文件和资源的路径配置原理,以方便在后面的文章中打下基础
271 3
|
8月前
|
前端开发 Java 数据库
微服务——SpringBoot使用归纳——Spring Boot集成Thymeleaf模板引擎——Thymeleaf 介绍
本课介绍Spring Boot集成Thymeleaf模板引擎。Thymeleaf是一款现代服务器端Java模板引擎,支持Web和独立环境,可实现自然模板开发,便于团队协作。与传统JSP不同,Thymeleaf模板可以直接在浏览器中打开,方便前端人员查看静态原型。通过在HTML标签中添加扩展属性(如`th:text`),Thymeleaf能够在服务运行时动态替换内容,展示数据库中的数据,同时兼容静态页面展示,为开发带来灵活性和便利性。
392 0