java – Spring中的单元测试:将依赖项注入到测试中的组件中
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – Spring中的单元测试:将依赖项注入到测试中的组件中,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1505字,纯文字阅读大概需要3分钟。
内容图文
![java – Spring中的单元测试:将依赖项注入到测试中的组件中](/upload/InfoBanner/zyjiaocheng/827/f7bd718809be4b8a8b72c494abc18c75.jpg)
我有一个非常简单的休息控制器:
@RestController
public class MyController {
@Autowired
public Logger logger;
通过以下配置注入记录器依赖项:
@Configuration
public class MyConfig {
@Bean
public Logger logger() {
return LoggerFactory.getLogger(MyController.class);
}
如果我运行包含控制器的Spring应用程序,那么一切正常.但是,在运行单元测试时,我无法设法实现此依赖注入.在这种情况下,我有以下测试配置:
@Configuration
@Profile("test")
public class MyTestConfig {
@Bean
public Logger logger() {
return LoggerFactory.getLogger(MyCOntroller.class);
}
这是我的单元测试代码的相关部分:
@RunWith(MockitoJUnitRunner.class)
@ContextConfiguration(classes = MyTestConfig.class)
@ActiveProfiles("test")
public class MyContollerTest {
但是,记录器对象在MyController中没有“自动装配”(请注意,我不想模拟记录器对象),这会导致空指针引用.
我错过了什么?
解决方法:
单元测试不应使用任何Spring配置.您应该简单地实例化您的组件,并手动注入依赖项(通常是假的).
你使用了现场注入,这让它变得有点困难.使用构造函数注入,您需要做的就是
Logger logger = LoggerFactory.getLogger(MyController.class);
MyController controller = new MyController(logger);
不过,Mockito可以帮助为你注入假依赖,即使在使用字段注入时,感谢@?? Mock,@ Spy和@InjectMocks注释:
@Spy
private Logger logger = LoggerFactory.getLogger(MyController.class);
@InjectMocks
private MyController controller;
@Before
public void prepare() {
MockitoAnnotations.initMocks(this);
}
也就是说,如果我没有弄错,你就不会使用@RunWith(SpringJUnit4ClassRunner.class),所以你的测试运行器对Spring一无所知,因此不会创建或使用任何Spring配置.
内容总结
以上是互联网集市为您收集整理的java – Spring中的单元测试:将依赖项注入到测试中的组件中全部内容,希望文章能够帮你解决java – Spring中的单元测试:将依赖项注入到测试中的组件中所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。