Spring整合Junit的使用详解

作者:Jokeronee 时间:2022-11-20 18:33:17 

我们在编写完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)

这个错误

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

来源:https://blog.csdn.net/Jokeronee/article/details/104194401

标签:Spring,整合,Junit
0
投稿

猜你喜欢

  • 解决Android调用系统分享给微信,出现分享失败,分享多文件必须为图片格式的问题

    2023-07-03 11:08:04
  • Flutter底部导航栏的实现方式

    2023-11-05 18:21:36
  • java设计模式-单例模式实现方法详解

    2022-02-15 13:56:01
  • C#网络编程基础之进程和线程详解

    2023-03-22 07:38:32
  • Java全面分析面向对象之继承

    2023-11-23 11:55:59
  • Android 如何定制vibrator的各种震动模式M 具体方法

    2023-08-13 02:09:01
  • Java 8 中 Map 骚操作之 merge() 的使用方法

    2022-03-31 01:19:27
  • C#生成PDF文件流

    2023-03-19 08:52:56
  • SpringBoot2使用Jetty容器操作(替换默认Tomcat)

    2023-11-24 01:17:15
  • 基于动态修改App.Config与web.Config的使用详解

    2021-07-19 12:09:27
  • SpringBoot项目中遇到的BUG问题及解决方法

    2022-01-19 14:44:38
  • C# Socket通信的实现(同时监听多客户端)

    2023-07-11 09:25:10
  • Android RollPagerView实现轮播图

    2023-06-12 21:10:32
  • Hutool开发MapUtil工具类使用示例

    2022-10-21 22:49:27
  • spring中使用@Autowired注解无法注入的情况及解决

    2023-06-10 21:48:24
  • C#中List〈string〉和string[]数组之间的相互转换

    2023-07-11 22:33:27
  • Hibernate环境搭建与配置方法(Hello world配置文件版)

    2022-07-31 06:26:04
  • Mybatis Plus使用XML编写动态sql的超简易方法

    2022-02-20 01:49:16
  • Javaweb获取表单数据的多种方式

    2022-12-25 18:13:41
  • Android自定义View用切图显示字符串

    2023-03-13 07:14:58
  • asp之家 软件编程 m.aspxhome.com