我正在使用

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”...相关推荐

  1. Spring Boot配置加载顺序

    Spring Boot 不仅可以通过配置文件进行配置,还可以通过环境变量.命令行参数等多种形式进行配置.这些配置都可以让开发人员在不修改任何代码的前提下,直接将一套 Spring Boot 应用程序在 ...

  2. Spring解析,加载及实例化Bean的顺序(零配置)

    点击上方蓝色"方志朋",选择"设为星标"回复"666"获取独家整理的学习资料! 作者:jb_hz blog.csdn.net/qq_2752 ...

  3. 手写简版spring --5--资源加载器解析文件注册对象

    一.目标 在完成 Spring 的框架雏形后,现在我们可以通过单元测试进行手动操作Bean对象的定义.注册和属性填充,以及最终获取对象调用方法.但这里会有一个问题,就是如果实际使用这个 Spring ...

  4. Spring中ApplicationContext加载机制和配置初始化

    转自:http://liuwei1578.blog.163.com/blog/static/495803642007116111923195/ Spring中ApplicationContext加载机 ...

  5. 在Spring Boot中加载初始化数据

    文章目录 依赖条件 data.sql文件 schema.sql 文件 @sql注解 @SqlConfig 注解 在Spring Boot中加载初始化数据 在Spring Boot中,Spring Bo ...

  6. springboot 读取配置文件_使用 @ConfigurationProperties 在 Spring Boot 中加载配置

    本文地址: 使用 @ConfigurationProperties 在 Spring Boot 中加载配置 使用 Spring Boot 加载配置文件的配置非常便利,我们只需要使用一些注解配置一下就能 ...

  7. 深入Spring:自定义注解加载和使用

    转自:https://blog.csdn.net/z69183787/article/details/53784845 前言 在工作中经常使用Spring的相关框架,免不了去看一下Spring的实现方 ...

  8. Spring框架如何加载和定义Spring Bean类?

    本篇介绍什么是Spring Bean类,如何创建Bean类,以及如何将Bean类添加到Spring IOC容器.通过本篇的学习,可以达成如下目标. ● 认识Spring Bean类 ● 掌握Bean类 ...

  9. spring 配置文件被加载两次

    如下web.xml示例: 1.用spring的配置加载contextConfigLocation 2.配置spring-mvc的contextConfigLocation <servlet> ...

最新文章

  1. Ruby: Ruby脚本在测试中的使用
  2. boost::bind的使用
  3. android: SharedPreferences存储
  4. linux shell 循环语句 for while until
  5. 前端学习(588):console面板简介与交互式命令
  6. 计算机应用技术自创ppt,教师必备:超好用的课件制作工具
  7. Java 算法 阿尔法乘积
  8. html页面判断其他div为空,将外部html加载到div - 页面加载然后变为空白
  9. 自动驾驶_感知_分割_车道线检测
  10. 【相机标定系列】单目相机,内参,外参
  11. 常用电子元器件基本知识整理
  12. android 上拉抽屉,Flutter上拉抽屉实现
  13. Android AndroidManifest.xml文件权限出现“Permission is only granted to system apps”的解决办法
  14. 微信接龙,查人,查谁没有接龙,工具
  15. 计算机网络复习(部分)
  16. HTML+CSS一篇文章搞定
  17. Tmux常用命令小结(超全够用)
  18. 成都敏之澳:拼多多投诉问题类型客服怎么做?
  19. [LGP2791] 幼儿园篮球题
  20. 将qq目录下文件写如qq.txt

热门文章

  1. mysql 8.0 yum_CentOS8 安装 MySQL8.0(yum)
  2. 结构体定义的三钟方式
  3. bsp的分析(其中使用buildroot文件夹建立rootfs)
  4. pynput模块—键盘鼠标操作和监听
  5. CH 5102Mobile Service题解
  6. 逆袭之旅.DAY08东软实训.多态~
  7. JAVA多线程程序ProgressBar
  8. spring-data-mongodb查询结果返回指定字段
  9. MySQL中Index Condition Pushdown(ICP)优化
  10. 《C语言程序设计》第三章练习与习题答案