AssertJ и Groovy плохо сочетаются

#groovy #assertj

#groovy #assertj

Вопрос:

Я сталкиваюсь со странной проблемой / багом с assert j и groovy с помощью step verifier, тестирующего mongo db. Я включил некоторый код, который поможет вам воспроизвести это локально, а также заставил тест работать, заменив замыкание просто строкой.

У меня есть следующий код:

   @Document
    @ToString(includePackage = false, includeFields = true)
    class Image {
        @Id private String id
        private String name

        Image() {
        }

        Image(String id, String name) {
            this.id = id
            this.name = name
        }

        String getId() {
            return id
        }

        void setId(String id) {
            this.id = id
        }

        String getName() {
            return name
        }

        void setName(String name) {
            this.name = name
        }
}       
  

ImageRepository.groovy

 interface ImageRepository extends ReactiveCrudRepository<Image, String>{
    Mono<Image> findByName(String name)
}
  

и следующий тест

 @RunWith(SpringRunner)
@DataMongoTest
class EmbeddedImageRepositoryTests {

    @Autowired
    ImageRepository repository

    @Autowired
    MongoOperations operations

    @Before
    void setup() {
        operations.dropCollection(Image)
        operations.insert(new Image([
                id  : '1',
                name: 'learning-spring-boot-cover.jpg'
        ]))
        operations.insert(new Image([
                id  : '2',
                name: 'learning-spring-boot-2nd-edition.jpg'
        ]))
        operations.insert(new Image([
                id  : '3',
                name: 'bazinga.png'
        ]))
        operations.findAll(Image).each { println it }
    }

    @Test
    void findAllShouldWork() {
        Flux<Image> images = repository.findAll()
        StepVerifier.create(images)
                .recordWith({ new ArrayList<>() })
                .expectNextCount(3)
                .consumeRecordedWith(
                {
                    assertThat(it).hasSize(3)
                    assertThat(it)
                            .extracting({it.name})
                            .contains(
                            'learning-spring-boot-cover.jpg',
                            'learning-spring-boot-2nd-edition.jpg',
                            'bazinga.png')
                })
                .expectComplete()
                .verify()
    }
}
  

Тест завершается неудачей, и после некоторого

 .extracting({it.name})
  

Когда оно изменяется на

 .extracting('name')
  

Затем тест пройден. У кого-нибудь была такая же проблема с использованием assert J и groovy и step verifier?

Комментарии:

1. какое исключение у вас есть?

Ответ №1:

Я не использовал AssertJ с groovy, но я предполагаю, что Groovy запутался при решении, какие extracting методы использовать, если бы мне пришлось выбирать те, которые сбивают с толку Groovy, я бы выбрал:

но у вас есть еще несколько перегруженных extracting в https://static.javadoc.io/org.assertj/assertj-core/3.12.2/org/assertj/core/api/AbstractIterableAssert.html#method.summary .