时间:2021-05-20
我们在编写完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注解实现注入对象,这样每个方法就都可以使用它了.
@Autowiredprivate AccountDao accountDao;但是这样运行之后会爆出空指针异常!!!
这是因为Junit默认是不认识Spring框架的,所以它内部没有IOC容器,这样就算你有@Autowired这个注解,它也不知道从哪里注入数据,所以就会有这个异常。
问题原因分析出来后,我们就想,能不能自己提供一个IOC容器呢,即
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("bean.xml");往往在现实开发中,软件开发和软件测试是两个职位,上述代码如果是开发编写的话,往往没什么问题。但测试人员可能会不懂Spring的代码,所以需要另外一种办法,好在Spring为我们提供了整合Junit的使用。
首先引入Spring-test的jar坐标
Spring给我们提供了一个main方法,这个main方法支持Spring框架,我们用这个main替换Junit的main方法。
@RunWith(SpringJUnit4ClassRunner.class)在类上加上这个注解,@Runwith代表要替换的运行器,后面在字节码参数
告诉Spring配置文件/配置类的位置
使用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)
这个错误
改完版本就可以正常运行测试方法了。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
配置步骤:1.导入Spring整合Junit的jar(坐标):org.springframeworkspring-test5.0.2.RELEASEtest2.
spring和mybatis整合整合思路需要spring通过单例方式管理SqlSessionFactory。spring和mybatis整合生成代理对象,使用S
这里使用的是spring-security和原生的jasigcas包来进行整合,为什么没有直接使用spring提供的spring-security-cas,后面
Mybatis批量插入返回影响的行数环境:postgresql9.6.5spring4.1mybatis3junit4log4jThesisMapper.xml
1,利用spring-data-redis整合项目使用的pom.xml: