运行控制器单元测试在IntelliJ中工作但不使用grails test-app

时间:2016-03-16 06:14:12

标签: grails grails-3.1

我正面临一个小小的挑战,我不知道如何解决它。在我目前的应用程序中,我们使用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内部工作而不是在命令行上。任何线索?

2 个答案:

答案 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)
}

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