我正面临一个小小的挑战,我不知道如何解决它。在我目前的应用程序中,我们使用RabbitMQ作为AMQP代理(使用 spring-rabbit ),我们成功地编写了集成测试,RabbitMQ ConnectionFactory自动装配等等。
现在我们还有一个小型控制器的单元测试,当我使用命令行运行它时会给我一个错误
grails test-app
org.springframework.beans.factory.BeanCreationException:错误 创建名为'rabbitMQConfig'的bean:注入自动装配 依赖失败;嵌套异常是 org.springframework.beans.factory.BeanCreationException:不能 autowire字段:私有 org.springframework.amqp.rabbit.connection.ConnectionFactory rabbitmq.config.RabbitMQConfig.connectionFactory;嵌套异常是 org.springframework.beans.factory.NoSuchBeanDefinitionException:没有 合格的bean类型 找到[org.springframework.amqp.rabbit.connection.ConnectionFactory] 对于依赖:预计至少有1个bean有资格作为autowire 这种依赖的候选人。依赖注释: {@ org.springframework.beans.factory.annotation.Autowired(所需=真)}
当我在IntelliJ中运行单元测试时,一切正常!
所以我想知道在IntelliJ和Grails命令行中运行测试之间有什么区别。我想它与Grails运行测试的环境有一些共同之处。但是我们还连接了一个RabbitMQTestConfig,因此集成测试可以与测试配置一起使用。
我有点疑惑为什么这在IntelliJ内部工作而不是在命令行上。任何线索?
答案 0 :(得分:0)
当您说"在IntelliJ"中运行单元测试时,您的意思是运行Gradle'测试'任务(因为你正在使用Grails 3)?
答案 1 :(得分:0)
您可以尝试在规范中使用doWithSpring定义模拟注入:
// define the mock or the object instance you want
ConnectionFactory connectionFactory = Mock(ConnectionFactory)
def doWithSpring = {
connectionFactory(InstanceFactoryBean, connectionFactory, ConnectionFactory)
}
如果不是解决方案,您可以尝试在再次测试之前运行干净