断言J和Groovy在一起玩得不好



我遇到了一个奇怪的问题/错误,断言 j 和 groovy 与步骤验证器测试 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')

然后测试通过。有没有人在使用断言 J 和 groovy 和步进验证器时遇到同样的问题?

我没有将

AssertJ 与 groovy 一起使用,但我的猜测是 Groovy 在解析使用哪些extracting方法时感到困惑,如果我必须选择那些混淆 Groovy 的方法,我会选择:

  • https://static.javadoc.io/org.assertj/assertj-core/3.12.2/org/assertj/core/api/AbstractIterableAssert.html#extracting-java.util.function.Function-
  • https://static.javadoc.io/org.assertj/assertj-core/3.12.2/org/assertj/core/api/AbstractIterableAssert.html#extracting-org.assertj.core.api.iterable.ThrowingExtractor-

但是你 https://static.javadoc.io/org.assertj/assertj-core/3.12.2/org/assertj/core/api/AbstractIterableAssert.html#method.summary 还有一些超载的extracting

最新更新