我有一个简单的类,可以根据简单的规则构建消息。如果可以在数据库中找到该消息,则使用找到的消息进行构建。但是,如果找不到该消息,则会从提供用于构建消息的元数据的服务中创建一条新消息。这是根据描述的方案创建消息的工作类。我创建了一个Spock测试,但是它失败并出现MissingProperty异常,并说它找不到使用该服务创建的RequestMessage。我还提供了Spock测试详细信息,剔除了不相关的详细信息。
class MessageService{
MessageBuilder messageBuilder;
MessageRepository messageRepository;
MessageMetadaProvider messageMetaDataProvider;
public RequestMessage getMessage(String id ) {
try {
MessageMetadata metadata = repository.findDefaulMessage(id);
RequestMessage requestMessage = builder.createMessage(metadata);
return requestMessage;
} catch (DataNotFoundException e) {
e.printStackTrace();
}
MessageMetadata metadata = messageMetaDataProvider.createNewMessageMetadata(id);
RequestMessage message = messageBuilder.buildNew(id , metadata);
return message;
}
}
def "Build Request Message "() {
given:
String id = '12345'
MessageBuilder messageBuilder = Mock()
MessageRepository messageRepository = Mock()
MessageMetadaProvider messageMetaDataProvider = Mock()
MessageService service = createMessageService(messageRepository,messageBuilder,messageMetaDataProvider)
MessageMetadata metadata = new MessageMedata(id, MessageType.DEFAULT)
when:
RequestMessage requestMessage = messageService .getMessage(id )
then:
1 * messageRepository.repository.findDefaulMessage(id) >> {throw new DataNotFoundException("Not Found")}
1 * messageMetaDataProvider.createNewMessageMetadata(id) >> metadata
1 * messageBuilder.buildNew(id , metadata) >> requestMessage
}
我真的很想了解为什么这不起作用。感谢您在成功测试此测试方面的帮助。谢谢
尝试在requestMessage
块而不是given
块中声明when
。
[Spock lifecycle具有某些令人惊讶的行为,其中之一是[interactions块之前]处理when
。