写Junit测试时用Autowired注入的类实例始终为空怎么解?
踩坑半天多,终于在网上寻觅到了解决方案,特此分享一下。
重要前提:src/main/java下的根包名必须和src/test/main的根包名完全一致,否则就会发生死活不能注入的情况,要继续进行下面的步骤,请先确认这个重要前提。

再接下来就是常规配置了。
pom.xml增加依赖spring-boot-starter-test,它会引入JUnit的测试包:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
然后给需要注入的类增加Component或是Service注解:
@SpringBootApplication
@Component
public class WebhookApplication implements CommandLineRunner {
private final Logger logger = LoggerFactory.getLogger(WebhookApplication.class); // Proxy server(from application-dev(stg,prod,qa).yml)
@Value("${webhook.proxy}")
private String proxy; public void setProxy(String proxy) {
this.proxy = proxy;
}
...
}
@Service
public class WebhookService {
private final Logger logger = LoggerFactory.getLogger(WebhookService.class);
...
}
写Component或是Service注解目的是能让这些类可以被Autowired方式输入。
再往下就是写测试类了:
@RunWith(SpringRunner.class)
@SpringBootTest
public class WebhookApplicationTest {
@Autowired
private WebhookApplication app=null; @Autowired
private WebhookService service=null; @Test
public void test() {
Assert.assertNotNull(app);
} @Test
public void test2() {
Assert.assertNotNull(service);
}
...
}
其中SpringRunner是Spring结合JUnit的运行器,说明这里可以进行JUnit测试。
注解@SpringBootTest是可以配置SpringBoot的关于测试的相关功能。
完事以后,运行test或是test2,能发现app或是service不为空了,这说明注入正确了。


--2020-04-09--
参考资料二:《深入浅出SpringBoot2.x》杨开振著
写Junit测试时用Autowired注入的类实例始终为空怎么解?的更多相关文章
- Junit问题01 利用 @Autowired 注入失效问题
1 利用 @Autowired 注入失效问题 1.1 问题描述 在使用Junit作为测试框架的单元测试中,直接了用@Autowired记性依赖注入时总是注入失败 1.2 问题原因 在测试类中没有设定上 ...
- junit测试时,出现java.lang.IllegalStateException: Failed to load ApplicationContext
课程设计要求进行junit测试,我是在已经做好的ssh项目上做的测试,测试类代码如下 package com.zhang.web.services; import static org.junit.A ...
- Junit测试时,如何截获到Console的输出
RT: 参考如下Junit 测试代码: 注释部分 import java.io.ByteArrayOutputStream; import java.io.PrintStream; import st ...
- 关于初步搭建完成SSH环境之后,JUnit test 测试成功,页面测试时:@Resource 注入的dao为null
这个问题研究了一天,还是因为配置的时候没有认真,一不小心,酿成了大错.当发现的时候感觉好尴尬啊::>_<:: CostAction: package com.tenni.action; i ...
- idea中使用junit测试时使用Scanner类无法正常测试
解决办法是:在main函数中测试方可有效. public static void main(String[] args){ Scanner sc = new Scanner(System.in);// ...
- maven项目对于测试时“无法加载主类”的解决方案
1.右键maven项目,选择 build path --------->Configure Build Path ,执行下列操作,保存即可.
- Junit测试代码时出现initializationError 错误
首先代码没有错误,执行Junit测试时出现以上错误.上网查资料发现少了包 从网上下载了一个jar包解决了hamcrest-core-1.3.jar 现在下载包搜索的好多坑,有的网站必须注册才能下载,而 ...
- 想用@Autowired注入static静态成员?官方不推荐你却还偏要这么做
生命太短暂,不要去做一些根本没有人想要的东西.本文已被 https://www.yourbatman.cn 收录,里面一并有Spring技术栈.MyBatis.JVM.中间件等小而美的专栏供以免费学习 ...
- junit测试延伸--私有方法测试
关于junit测试的延伸,这里有类概念级别的测试,继承类的测试,接口的测试,抽象类的测试,关于这些类级别的测试,这里我就不做多的赘述了. 关于上面的几个测试就是说,我们不应该单纯的去测试类中的一些方法 ...
随机推荐
- Java 多态 接口继承等学习笔记
Super关键字 1.子类可以调用父类声明的构造方法 : 语法:在子类的构造方法中使用super关键字 super(参数列表) 2.操作被隐藏的成员变量(子类的成员变量和父类的成员变量重名的说法)和 ...
- python爬虫:XPath语法和使用示例
python爬虫:XPath语法和使用示例 XPath(XML Path Language)是一门在XML文档中查找信息的语言,可以用来在XML文档中对元素和属性进行遍历. 选取节点 XPath使用路 ...
- 【MySQL】如何最大程度防止人为误操作MySQL数据库?这次我懂了!!
写在前面 今天,一位哥们打电话来问我说误操作了他们公司数据库中的数据,如何恢复.他原本的想法是登录数据库update一个记录,结果忘了加where条件,于是悲剧发生了.今天,我们不讲如何恢复误操作的数 ...
- vs2017引用vue组件中文乱码
原因:文件默认编码格式为ASNI编码,需要改成UTF-8编码 解决方案: ①用记事本打开component.js文件 ②另存文件,修改编码为UTF-8编码,保存
- [netty4][netty-common]netty之ResourceLeakDetector的使用与实现
netty之ResourceLeakDetector的使用与实现 通过WeakReference和ReferenceQueue做针对需要手动释放的资源的侦测 使用 设置日志级别: ServerBoot ...
- .Net MVC5(.Net Framework 4.0+)多语言解决方案
最近项目需要做多语言,原先是2种语言(中文/英文),现在又要加一种语言,成了3种.那么原来的方式肯定不适用了,只能升级解决方案. 原来的写法,使用三目表达式,按照当前全局变量的语言类型,返回不同的语言 ...
- gcc手动安装
Linux下: 手动安装gcc需要5个基础包 百度网盘链接:链接:包链接 密码:izxj 按照以上顺序安装:rpm -ivh 包名 为什么要手动安装呢,因为遇到这个情况:linux服务器没有权限连 ...
- JavaScript正则表达式的模式匹配教程,并且附带充足的实战代码
JavaScript正则表达式的模式匹配 引言 正文 一.正则表达式定义 二.正则表达式的使用 三.RegExp直接量 (1)正则表达式初体验 (2)深入了解正则 字符类 重复 选择 分组与引用 指定 ...
- .Net Core中的诊断日志DiagnosticSource讲解
前言 近期由于需要进行分布式链路跟踪系统的技术选型,所以一直在研究链路跟踪相关的框架.作为能在.Net Core中使用的APM,SkyWalking自然成为了首选.SkyAPM-dotnet是 ...
- 【接口自动化】Python+Requests接口自动化测试框架搭建【三】
经过上两篇文章的讲解,我们已经完成接口自动化的基础框架,现在开始根据实际项目丰满起来. 在PyCharm中新建项目,项目工程结构如下: config:配置文件夹,可以将一些全局变量放于配置文件中,方便 ...