Spring整合Junit的使用详解

 更新时间:2020年02月07日 14:39:32   作者:Jokeronee  
这篇文章主要介绍了Spring整合Junit的使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

我们在编写完Spring的代码后,往往需要测试代码的正确性,这个时候就需要用到单元测试了。我们这里使用的版本是junit4.

一个程序的入口是main方法,但是junit中不存在main方法,是因为junit内部的原理是它自己内部就有个main方法,运行扫描带@Test注解的方法,然后反射调用该方法,完成测试。

调用Spring框架的测试代码:

@Test
  public void function(){
    ApplicationContext applicationContext = new ClassPathXmlApplicationContext("bean.xml");
    AccountDao accountDao1 = applicationContext.getBean("AccountDao", AccountDao.class);
    accountDao1.findAll();
  }

我们发现这只是查询,还有增删改方法没有测试,但是这几个测试都有重复代码块,我们应该把它们抽取出来

 ApplicationContext applicationContext = new ClassPathXmlApplicationContext("bean.xml");
    AccountDao accountDao1 = applicationContext.getBean("AccountDao", AccountDao.class);

我们可以在外面定义一个全局变量,用来存储accountDao的值,并且通过@Autowired注解实现注入对象,这样每个方法就都可以使用它了.

@Autowired
private AccountDao accountDao;

但是这样运行之后会爆出空指针异常!!!

这是因为Junit默认是不认识Spring框架的,所以它内部没有IOC容器,这样就算你有@Autowired这个注解,它也不知道从哪里注入数据,所以就会有这个异常。

问题原因分析出来后,我们就想,能不能自己提供一个IOC容器呢,即

ApplicationContext applicationContext = new ClassPathXmlApplicationContext("bean.xml");

往往在现实开发中,软件开发和软件测试是两个职位,上述代码如果是开发编写的话,往往没什么问题。但测试人员可能会不懂Spring的代码,所以需要另外一种办法,好在Spring为我们提供了整合Junit的使用。

首先引入Spring-test的jar坐标

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

Spring给我们提供了一个main方法,这个main方法支持Spring框架,我们用这个main替换Junit的main方法。

@RunWith(SpringJUnit4ClassRunner.class)

在类上加上这个注解,@Runwith代表要替换的运行器,后面在字节码参数

告诉Spring配置文件/配置类的位置

@ContextConfiguration(locations = "classpath:bean.xml")

使用Contextfiguration注解可以完成该功能,locations表示配置文件的位置,加上classpath表示类路径。

至此整合结束,测试方法直接使用既可,但是这里有个版本问题,如果你使用的是Spring5.0以上的话,你的Junit版本必须是4.12以上!!!

不然会曝出

java.lang.ExceptionInInitializerError
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)

这个错误

改完版本就可以正常运行测试方法了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 详解关于springboot-actuator监控的401无权限访问

    详解关于springboot-actuator监控的401无权限访问

    本篇文章主要介绍了详解关于springboot-actuator监控的401无权限访问,非常具有实用价值,有兴趣的可以了解一下
    2017-09-09
  • IDEA与模拟器安装调试失败的处理方法:INSTALL_PARSE_FAILED_NO_CERTIFICATES

    IDEA与模拟器安装调试失败的处理方法:INSTALL_PARSE_FAILED_NO_CERTIFICATES

    这篇文章主要介绍了IDEA与模拟器安装调试失败的处理方法:INSTALL_PARSE_FAILED_NO_CERTIFICATES,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-09-09
  • Java深入学习图形用户界面GUI之创建窗体

    Java深入学习图形用户界面GUI之创建窗体

    图形编程中,窗口是一个重要的概念,窗口其实是一个矩形框,应用程序可以使用其从而达到输出结果和接受用户输入的效果,学习了GUI就让我们用它来创建一个窗体
    2022-05-05
  • 深入浅析Java 抽象类和接口

    深入浅析Java 抽象类和接口

    这篇文章主要介绍了Java 抽象类和接口的相关知识,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-11-11
  • JDK8接口的默认与静态方法-接口与抽象类的区别详解

    JDK8接口的默认与静态方法-接口与抽象类的区别详解

    这篇文章主要介绍了JDK8接口的默认与静态方法-接口与抽象类的区别详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,,需要的朋友可以参考下
    2019-06-06
  • 在Java中int和byte[]的相互转换

    在Java中int和byte[]的相互转换

    这篇文章主要介绍了在Java中int和byte[]的相互转换的相关资料,需要的朋友可以参考下
    2016-11-11
  • IDEA中配置Python环境并运行方式

    IDEA中配置Python环境并运行方式

    本文介绍了在Mac和Windows平台上安装Python环境的方法,并详细讲解了如何在IntelliJ IDEA中安装Python插件、创建Python工程和运行Python文件,同时,还提到了一些常用的Python框架,如Django、Google App Engine和SQL支持
    2025-03-03
  • Java使用Curator进行ZooKeeper操作的详细教程

    Java使用Curator进行ZooKeeper操作的详细教程

    Apache Curator 是一个基于 ZooKeeper 的 Java 客户端库,它极大地简化了使用 ZooKeeper 的开发工作,在分布式系统中,ZooKeeper 通常被用来作为协调服务,而 Curator 则为我们提供了更简洁易用的接口,本文将介绍 Curator 的核心功能及实践样例,需要的朋友可以参考下
    2025-04-04
  • EditPlus运行java时从键盘输入数据的操作方法

    EditPlus运行java时从键盘输入数据的操作方法

    这篇文章主要介绍了EditPlus运行java时从键盘输入数据的操作方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • Java Idea TranslationPlugin翻译插件使用解析

    Java Idea TranslationPlugin翻译插件使用解析

    这篇文章主要介绍了Java Idea TranslationPlugin翻译插件使用解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04

最新评论