junit跳过datasource_maven – spring集成测试无法加载上下文“另一个资源已存在,名称为dataSource”...
我正在使用
spring-boot 1.4.3中引入的测试注释进行集成测试
@RunWith(SpringRunner.class)
@SpringBootTest
public class MyServiceIT { }
根据documentation,测试上下文被缓存并重用以加速集成测试.这种行为是我想要的,因为它需要大量的时间来初始化应用程序上下文.我的故障安全插件配置了
1
true
允许集成测试在同一进程中运行,以利用应用程序上下文缓存.
最近,我编写了一个使用@MockBean注释的集成测试来模拟某些bean的行为.
@RunWith(SpringRunner.class)
@SpringBootTest
public class AnotherServiceIT {
@MockBean
SomeService service1
}
虽然测试运行良好,但是当通过maven验证运行时,多个集成测试会因错误消息而失败
javax.naming.NamingException: Another resource already exists with
name dataSource – pick a different name
如果我使用JUnit @Ignore注释跳过此特定测试,一切都恢复正常.
此行为似乎表明使用@MockBean更改了缓存行为,并且每个测试都尝试创建自己的数据源.我还要提一下,我正在使用通过XADataSourceAutoConfiguration创建的AtomikosDataSourceBean.
如何克服此问题,以便我的集成测试仍然可以使用缓存上下文并同时使用@MockBean?
最佳答案 嗯,SomeService会以任何方式与您的数据源相关吗?
因为您的上下文被缓存而@MockBean执行以下操作:
used to add mocks to a Spring ApplicationContext … Any existing single bean of the same type defined in the context will be replaced by the mock,
和
If there is more than one bean of the requested type, qualifier metadata must be specified at field level:
@RunWith(SpringRunner.class)
public class ExampleTests {
@MockBean
@Qualifier("example")
private ExampleService service;
编辑:
因此,如果您的SomeService是DataSource的实现,请尝试添加限定符.如果SomeService中包含DataSource,并且您需要访问其中的某些方法,则可以尝试使用@Mock并指定需要通过自己的mock或autowire返回的任何对象.
@Mock
SomeService someService;
@Mock
SomeDependency mockDependency;
@Autowired
OtherDependency realDependency;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
doReturn(mockDependency).when(someService).getSomeDependency();
doReturn(realDependency).when(someService).getOtherDependency();
}
junit跳过datasource_maven – spring集成测试无法加载上下文“另一个资源已存在,名称为dataSource”...相关推荐
- Spring Boot配置加载顺序
Spring Boot 不仅可以通过配置文件进行配置,还可以通过环境变量.命令行参数等多种形式进行配置.这些配置都可以让开发人员在不修改任何代码的前提下,直接将一套 Spring Boot 应用程序在 ...
- Spring解析,加载及实例化Bean的顺序(零配置)
点击上方蓝色"方志朋",选择"设为星标"回复"666"获取独家整理的学习资料! 作者:jb_hz blog.csdn.net/qq_2752 ...
- 手写简版spring --5--资源加载器解析文件注册对象
一.目标 在完成 Spring 的框架雏形后,现在我们可以通过单元测试进行手动操作Bean对象的定义.注册和属性填充,以及最终获取对象调用方法.但这里会有一个问题,就是如果实际使用这个 Spring ...
- Spring中ApplicationContext加载机制和配置初始化
转自:http://liuwei1578.blog.163.com/blog/static/495803642007116111923195/ Spring中ApplicationContext加载机 ...
- 在Spring Boot中加载初始化数据
文章目录 依赖条件 data.sql文件 schema.sql 文件 @sql注解 @SqlConfig 注解 在Spring Boot中加载初始化数据 在Spring Boot中,Spring Bo ...
- springboot 读取配置文件_使用 @ConfigurationProperties 在 Spring Boot 中加载配置
本文地址: 使用 @ConfigurationProperties 在 Spring Boot 中加载配置 使用 Spring Boot 加载配置文件的配置非常便利,我们只需要使用一些注解配置一下就能 ...
- 深入Spring:自定义注解加载和使用
转自:https://blog.csdn.net/z69183787/article/details/53784845 前言 在工作中经常使用Spring的相关框架,免不了去看一下Spring的实现方 ...
- Spring框架如何加载和定义Spring Bean类?
本篇介绍什么是Spring Bean类,如何创建Bean类,以及如何将Bean类添加到Spring IOC容器.通过本篇的学习,可以达成如下目标. ● 认识Spring Bean类 ● 掌握Bean类 ...
- spring 配置文件被加载两次
如下web.xml示例: 1.用spring的配置加载contextConfigLocation 2.配置spring-mvc的contextConfigLocation <servlet> ...
最新文章
- Ruby: Ruby脚本在测试中的使用
- boost::bind的使用
- android: SharedPreferences存储
- linux shell 循环语句 for while until
- 前端学习(588):console面板简介与交互式命令
- 计算机应用技术自创ppt,教师必备:超好用的课件制作工具
- Java 算法 阿尔法乘积
- html页面判断其他div为空,将外部html加载到div - 页面加载然后变为空白
- 自动驾驶_感知_分割_车道线检测
- 【相机标定系列】单目相机,内参,外参
- 常用电子元器件基本知识整理
- android 上拉抽屉,Flutter上拉抽屉实现
- Android AndroidManifest.xml文件权限出现“Permission is only granted to system apps”的解决办法
- 微信接龙,查人,查谁没有接龙,工具
- 计算机网络复习(部分)
- HTML+CSS一篇文章搞定
- Tmux常用命令小结(超全够用)
- 成都敏之澳:拼多多投诉问题类型客服怎么做?
- [LGP2791] 幼儿园篮球题
- 将qq目录下文件写如qq.txt