Декларативный клиент Micronaut в Grails: как мне это издеваться? - PullRequest
0 голосов
/ 02 апреля 2020

Как правильно смоделировать декларативный клиент REST при модульном тестировании службы Grails?

Подробности

Я использую декларативный HTTP-клиент Micronaut в моих Grails 4 приложение.

Я попытался выполнить модульное тестирование клиента с помощью Ersatz, но не смог заставить его работать через несколько дней: Как настроить Micronaut @Client в среде тестирования Grails?

Теперь я пытаюсь провести модульное тестирование службы, которая использует его, используя стандартный подход для имитации зависимостей:

class MyServiceSpec extends Specification implements
        ServiceUnitTest<MyService> {

    MyRestClient myRestClient = Mock()

    def setup() {
        service.myRestClient = myRestClient
    }
    ...
}

Это дает мне NoSuchBeanDefinitionException.

Методом проб и ошибок я обнаружил, что декларативный клиент не работает с def myRestClient, как другие бины Grails. Это должно быть @Autowired.

    at org.grails.testing.GrailsUnitTest$Trait$Helper.defineBeans(GrailsUnitTest.groovy:99)
    at grails.testing.services.ServiceUnitTest$Trait$Helper.mockArtefact(ServiceUnitTest.groovy:58)
    at org.grails.testing.ParameterizedGrailsUnitTest$Trait$Helper.getArtefactInstance(ParameterizedGrailsUnitTest.groovy:48)
    at grails.testing.services.ServiceUnitTest$Trait$Helper.getService(ServiceUnitTest.groovy:85)
    at com.mycompany.MyServiceSpec.setup(MyServiceSpec.groovy:##)
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.mycompany.MyRestClient' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1662)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1221)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1175)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:595)
    ... 15 more

1 Ответ

0 голосов
/ 02 апреля 2020

Это оказалось ошибкой в ​​Grails 4.0.1. Эта проблема, похоже, исправлена ​​в 4.0.2.

https://github.com/rmorrise/client-spec/tree/mock-client

Прописываете @erichelgeson и ребятам из слабого канала Grails за их помощь!

...