#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, я бы выбрал:
- https://static.javadoc.io/org.assertj/assertj-core/3.12.2/org/assertj/core/api/AbstractIterableAssert.html#extracting-java.util.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-
но у вас есть еще несколько перегруженных extracting
в https://static.javadoc.io/org.assertj/assertj-core/3.12.2/org/assertj/core/api/AbstractIterableAssert.html#method.summary .