1

私はそれに取り組む方法がわからない小さな課題に直面しています。私の現在のアプリケーションでは、RabbitMQ を AMQP ブローカーとして使用しており ( <strong>spring-rabbit を使用)、RabbitMQ ConnectionFactory が自動配線されるなどの統合テストを正常に作成しました。

コマンドラインを使用して実行するとエラーが発生する、小さなコントローラー用の単体テストもいくつかあります。 grails test-app

org.springframework.beans.factory.BeanCreationException: 'rabbitMQConfig' という名前の Bean の作成中にエラーが発生しました: 自動配線された依存関係の注入に失敗しました。ネストされた例外は org.springframework.beans.factory.BeanCreationException: Could not autowire field: private org.springframework.amqp.rabbit.connection.ConnectionFactory rabbitmq.config.RabbitMQConfig.connectionFactory; です。ネストされた例外は org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualing bean of type [org.springframework.amqp.rabbit.connection.ConnectionFactory] ​​が依存関係に見つかりません: この依存関係のオートワイヤー候補として適格な少なくとも 1 つの Bean が必要です。依存関係アノテーション: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

IntelliJ内で単体テストを実行すると、すべて正常に動作します

だから、IntelliJ内でテストを実行することとGrailsコマンドラインでテストを実行することの違いは何だろうと思っています。Grails がテストを実行する環境と何らかの関係があると思います。しかし、統合テストがテスト構成で機能するように、RabbitMQTestConfig も接続しました。

これがコマンドラインではなく IntelliJ 内で機能する理由について、私は少し困惑しています。どんな手掛かり?

4

2 に答える 2

0

spec で doWithSpring を使用してモック インジェクションを定義することができます。

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

それが解決策でない場合は、再度テストする前にクリーンな実行を試みることができます

于 2017-01-06T11:17:40.307 に答える