如果使用@MockBean

时间:2018-03-15 15:13:56

标签: java spring-boot testing mocking arangodb

我们正在开发一个Spring-Boot应用程序,它使用ArangoDB和ArangoDB团队本身的Spring-Data集成(https://github.com/arangodb/spring-data)。

当我们尝试开发集成测试时遇到了一些奇怪的问题:当我们在测试类中为不相关的Spring组件使用@MockBean注释时,无法创建应用程序上下文:

org.springframework.beans.factory.UnsatisfiedDependencyException:
   Error  creating bean with name 'repository': Unsatisfied dependency 
   expressed through constructor parameter 1: Ambiguous argument values for 
   parameter of type [com.arangodb.springframework.core.ArangoOperations] - 
   did you specify the correct bean references as arguments?

似乎仅仅存在@MockBean Annotation会产生此错误。

此外,安装了Spring Tools的Eclipse在Main类上显示以下错误:

No constructor with 1 argument defined in class
'com.arangodb.springframework.repository.ArangoRepositoryFactoryBean'

这个错误消息似乎是真的,因为这个工厂只有一个双参数构造函数。无论如何,没有@MockBean的测试都会成功运行。

示例

我们将项目拆分为一个最小的例子,您可以在GitHub上找到它:https://github.com/mark--/arango-mockbean-error

相关代码在单个测试类DAOTest中。如果存在@MockBean批注,则会发生上述错误,如果删除,则会创建应用程序上下文。

小心:我们删除了示例项目中的测试设置代码,特别是使用docker设置ArangoDB实例:因此测试失败也没有@MockBean注释但仅由于失踪的ArangoDB。

更新

来自MockBean annotation in Spring Boot test causes NoUniqueBeanDefinitionException的解决方法(给@MockBean一个名字)也适合我们,所以这似乎是一些Spring bug。

1 个答案:

答案 0 :(得分:0)