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表示所有类下所有方法都使用事务


相关文章
|
29天前
|
Java 测试技术 开发者
必学!Spring Boot 单元测试、Mock 与 TestContainer 的高效使用技巧
【10月更文挑战第18天】 在现代软件开发中,单元测试是保证代码质量的重要手段。Spring Boot提供了强大的测试支持,使得编写和运行测试变得更加简单和高效。本文将深入探讨Spring Boot的单元测试、Mock技术以及TestContainer的高效使用技巧,帮助开发者提升测试效率和代码质量。
156 2
|
1月前
|
存储 人工智能 Java
将 Spring AI 与 LLM 结合使用以生成 Java 测试
AIDocumentLibraryChat 项目通过 GitHub URL 为指定的 Java 类生成测试代码,支持 granite-code 和 deepseek-coder-v2 模型。项目包括控制器、服务和配置,能处理源代码解析、依赖加载及测试代码生成,旨在评估 LLM 对开发测试的支持能力。
38 1
|
2月前
|
JavaScript 前端开发 Java
Spring Boot+cucumber+契约测试
Spring Boot+cucumber+契约测试
22 0
Spring Boot+cucumber+契约测试
|
2月前
|
Java 数据库连接 数据格式
【Java笔记+踩坑】Spring基础2——IOC,DI注解开发、整合Mybatis,Junit
IOC/DI配置管理DruidDataSource和properties、核心容器的创建、获取bean的方式、spring注解开发、注解开发管理第三方bean、Spring整合Mybatis和Junit
【Java笔记+踩坑】Spring基础2——IOC,DI注解开发、整合Mybatis,Junit
|
3月前
|
测试技术
单元测试问题之使用TestMe时利用JUnit 5的参数化测试特性如何解决
单元测试问题之使用TestMe时利用JUnit 5的参数化测试特性如何解决
48 2
|
3月前
|
Java 测试技术 Maven
单元测试问题之在Maven项目中引入JUnit 5和Mockito的依赖如何解决
单元测试问题之在Maven项目中引入JUnit 5和Mockito的依赖如何解决
200 1
|
3月前
|
测试技术 Java Spring
Spring 框架中的测试之道:揭秘单元测试与集成测试的双重保障,你的应用真的安全了吗?
【8月更文挑战第31天】本文以问答形式深入探讨了Spring框架中的测试策略,包括单元测试与集成测试的有效编写方法,及其对提升代码质量和可靠性的重要性。通过具体示例,展示了如何使用`@MockBean`、`@SpringBootTest`等注解来进行服务和控制器的测试,同时介绍了Spring Boot提供的测试工具,如`@DataJpaTest`,以简化数据库测试流程。合理运用这些测试策略和工具,将助力开发者构建更为稳健的软件系统。
59 0
|
3月前
|
测试技术
如何使用 JUnit 测试方法是否存在异常
【8月更文挑战第22天】
58 0
|
3月前
|
Java 测试技术 Maven
Junit单元测试 @Test的使用教程
这篇文章是一个关于Junit单元测试中`@Test`注解使用的教程,包括在Maven项目中添加Junit依赖、编写带有@Test注解的测试方法,以及解决@Test注解不生效的常见问题。
|
3月前
|
XML Java 测试技术
Spring5入门到实战------17、Spring5新功能 --Nullable注解和函数式注册对象。整合JUnit5单元测试框架
这篇文章介绍了Spring5框架的三个新特性:支持@Nullable注解以明确方法返回、参数和属性值可以为空;引入函数式风格的GenericApplicationContext进行对象注册和管理;以及如何整合JUnit5进行单元测试,同时讨论了JUnit4与JUnit5的整合方法,并提出了关于配置文件加载的疑问。
Spring5入门到实战------17、Spring5新功能 --Nullable注解和函数式注册对象。整合JUnit5单元测试框架

热门文章

最新文章