1

我正面临一个小挑战,我不知道如何解决它。在我当前的应用程序中,我们使用 RabbitMQ 作为 AMQP 代理(使用​<strong>spring-rabbit​),并且我们成功编写了集成测试,其中 RabbitMQ ConnectionFactory 自动连接等。

现在我们还有一些针对小型控制器的单元测试,当我使用命令行运行它们时会出现错误 grails test-app

org.springframework.beans.factory.BeanCreationException:创建名为“rabbitMQConfig”的bean时出错:注入自动装配的依赖项失败;嵌套异常是 org.springframework.beans.factory.BeanCreationException:无法自动装配字段:私有 org.springframework.amqp.rabbit.connection.ConnectionFactory rabbitmq.config.RabbitMQConfig.connectionFactory;嵌套异常是 org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type of [org.springframework.amqp.rabbit.connection.ConnectionFactory] ​​found for dependency: 预计至少有 1 个 bean 有资格作为此依赖项的自动装配候选者。依赖注解:{@org.springframework.beans.factory.annotation.Autowired(required=true)}

当我在 IntelliJ 中运行单元测试时一切正常

所以我想知道在 IntelliJ 和 Grails 命令行中运行测试之间有什么区别。我想这与 Grails 运行测试的环境有关。但我们还连接了 RabbitMQTestConfig,以便集成测试与测试配置一起工作。

我对为什么这在 IntelliJ 中而不是在命令行中起作用感到有点困惑。有什么线索吗?

4

2 回答 2

0

您可以尝试在您的规范中使用 doWithSpring 定义您的模拟注入:

// define the mock or the object instance you want
ConnectionFactory connectionFactory = Mock(ConnectionFactory) 
def doWithSpring = {
  connectionFactory(InstanceFactoryBean, connectionFactory, ConnectionFactory)
}

如果这不是解决方案,您可以在再次测试之前尝试运行 clean

于 2017-01-06T11:17:40.307 回答
0

当您说“在 IntelliJ 中运行单元测试”时,您的意思是运行 Gradle 的“测试”任务(因为您使用的是 Grails 3)?

于 2016-03-17T21:20:31.303 回答