模拟期间的不同期望
Different expectations during mocking
我正在测试对我的消息的过滤。
只有在id不存在的情况下才会保存消息。
List<Message> messages = ninitializedDto.stream()
.filter(message -> !messageRepository.existsById(message.getId())
.map(this::initializeMessage)
.collect(Collectors.toList());
return messageRepository.saveAll(messages);
但在我的 Spock 测试中,大小总是 returns 1。(即使我在 return 之前打印了 messages.size()
(它 returns 0)
def "createMessages should filter and save only messages that does not exist yet"() {
given:
UninitializedDto dto = Mock()
dto.getId() >> 2L
List<UninitializedDto> messageDtos = [dto]
messageRepository.existsById(dto.getId()) >> true
when:
initialize.createMessages(messageDtos)
then:
1 * messageRepository.saveAll(_) >> {
List<Message> savedMessageList ->
assert savedMessageList.size() == 0
}
}
想通了。存在将列表参数包装在另一个列表中的错误。
1 * messageRepository.saveAll(_) >> {
List<Message> savedMessageList ->
List<Message> messageList = savedMessageList.get(0) as List<Message>
assert savedMessageList.size() == 0
}
我正在测试对我的消息的过滤。 只有在id不存在的情况下才会保存消息。
List<Message> messages = ninitializedDto.stream()
.filter(message -> !messageRepository.existsById(message.getId())
.map(this::initializeMessage)
.collect(Collectors.toList());
return messageRepository.saveAll(messages);
但在我的 Spock 测试中,大小总是 returns 1。(即使我在 return 之前打印了 messages.size()
(它 returns 0)
def "createMessages should filter and save only messages that does not exist yet"() {
given:
UninitializedDto dto = Mock()
dto.getId() >> 2L
List<UninitializedDto> messageDtos = [dto]
messageRepository.existsById(dto.getId()) >> true
when:
initialize.createMessages(messageDtos)
then:
1 * messageRepository.saveAll(_) >> {
List<Message> savedMessageList ->
assert savedMessageList.size() == 0
}
}
想通了。存在将列表参数包装在另一个列表中的错误。
1 * messageRepository.saveAll(_) >> {
List<Message> savedMessageList ->
List<Message> messageList = savedMessageList.get(0) as List<Message>
assert savedMessageList.size() == 0
}