JUnit测试/调用函数几次

问题描述 投票:-2回答:3

我正在从单个页面中提取概念,并且该页面正在使用不同的功能,所以我创建了一个函数,如果尚未分配值,则该函数将分配值。

public String text() {                               
    if (text.isPresent()) {                          
        return text.get();                           
    }                                                
    this.text = Optional.of(extractText(pdDocument));
    return text.get();                               
}

我想创建一个测试,以检查一次函数被调用并且上下文在同一上下文中执行某些功能的函数之间共享的测试

这是两次调用text()的示例

private Optional<String> packingListNet() {           
    return locatePattern(text(), PACKING_LIST_NET);   
}  

private Optional<String> packingListNumber() {        
    return locatePattern(text(), PACKING_LIST_NUMBER);
}                  

将感谢您提供任何信息,谢谢

java junit
3个回答
1
投票

技术答案:您可以使用模拟库(例如PowerMockito)来创建Optional类的mocked实例。并且当您有一个模拟对象时,您可以指示该模拟对象如何对方法调用做出反应。然后,您需要将模拟的Optional对象“放入”被测类中。

您可以使用它来覆盖第一个if语句:您希望模拟程序看到isPresent()调用,返回true,然后返回特定的字符串。然后,您的测试用例可以检查“预期字符串返回了”。另一方面,类似的情况类似,当模拟的Optional“为空”时,请确保返回另一个字符串,然后进行检查。

但是说实话,是否应该做所有事情值得怀疑。

您应该专注于您的方法所提供的公共合同

这将意味着:

  • 使您可以将(真实的)可选对象传递到被测类中>]
  • [当您的Optional不为空时,您的测试将期望...您放入其中的内容
  • [当您的Optional为空时,您的测试期望extractText()会返回任何内容
  • 当然,这里的模拟确实有问题:可选的是final

类。因此,您需要将Mockito与“最终启用的实验支持”一起使用,或者需要使用PowerMock(ito)(我强烈建议您永远不要使用它)。

所以,正如所说:避免嘲笑。


1
投票

我认为这种方法构想不好。它可能依赖于私有的可变状态,这将导致多个文档和线程对其进行访问。


0
投票

我不确定您要问什么。信息尚不清楚,但这也许可以帮助您:

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