使用NullPointerException测试消息时Spock测试失败

问题描述 投票:0回答:1

我有一个简单的类,可以根据简单的规则构建消息。如果可以在数据库中找到该消息,则使用找到的消息进行构建。但是,如果找不到该消息,则会从提供用于构建消息的元数据的服务中创建一条新消息。这是根据描述的方案创建消息的工作类。我创建了一个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
}

我真的很想了解为什么这不起作用。感谢您在成功测试此测试方面的帮助。谢谢

java unit-testing spock
1个回答
0
投票

尝试在requestMessage块而不是given块中声明when

[Spock lifecycle具有某些令人惊讶的行为,其中之一是[interactions块之前]处理when

© www.soinside.com 2019 - 2024. All rights reserved.