【问题标题】:Running a controller Unit Test works in IntelliJ but not using grails test-app运行控制器单元测试在 IntelliJ 中有效,但不使用 grails test-app
【发布时间】:2017-01-06 19:17:40
【问题描述】:

我正面临一个小挑战,我不知道如何解决它。在我当前的应用程序中,我们使用 RabbitMQ 作为 AMQP 代理(使用​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: 否 符合条件的 bean 类型 [org.springframework.amqp.rabbit.connection.ConnectionFactory] ​​找到 对于依赖项:预计至少有 1 个符合自动装配条件的 bean 这种依赖的候选人。依赖注解: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

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

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

我有点困惑为什么这在 IntelliJ 中有效,而不是在命令行中。有什么线索吗?

【问题讨论】:

    标签: grails grails-3.1


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-25
        • 1970-01-01
        相关资源
        最近更新 更多