作为程序员,搞后端开发,当然离不开单元测试了。举个例子,测试下mapper接口,service接口等等。
当用到spring容器的时候,在测试类直接写 如下代码:
@Autowired
private AccountService accountServiceImpl;
当运行测试代码的时候,控制台会报错,提示:accountServiceImpl注入为空,到这里,很多人都会感到不可思议,明明自己代
码没写错,又跑回去检查配置文件,也是没问题,然后就束手无策了。
其实,道理是这样的。因为我们的accountServiceImpl是被spring容器托管的,容器没有加载到测试类,怎么会识别测试接口呢。
只需要这样改一下就可以了:
首先引入jar包
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>4.3.14.RELEASE</version>
<scope>test</scope>
</dependency>
然后:在测试类里加上这样的注解:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:spring/application-*.xml"})
public class accountServiceImplTest {
@Autowired
private AccountService accountServiceImpl;
}
但是:这样的话我们每个测试类都要重复写一遍,可以这样改一下,写一个基础的类,加上注解,然后我们其他的测试类直接偶从基础类继承就可以了。
package com.wct.shop.basic;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
/**
* @author :cijiancao
* @version :1.0.0
* @Date :2018/3/6 18:53
* @Description :
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:spring/application-*.xml"})
public class TestBasic {
}
好了,这样就可以开心的测试了,再也不会报没有注入的错误了。