用Java模拟文件-模拟内容-Mockito

用Java模拟文件-模拟内容-Mockito,第1张

用Java模拟文件-模拟内容-Mockito

您似乎追求相互矛盾的目标。一方面,您试图避免将数据写入磁盘,这在测试中并不是一个坏目标。另一方面,您正在尝试测试I /
O处理类,这意味着您将使用假定您

File
将使用本机调用的系统实用程序进行工作。因此,这是我的指导:

  • 不要试图嘲笑一个
    File
    。只是不要。太多的本地事物依赖于此。
  • 如果可以的话,请将您的I / O处理代码分成打开a的一半
    File
    和将其转换为a
    Reader
    的一半,以及从中解析HTML的一半
    Reader
  • 那时,您根本不需要模拟-只需构造一个
    StringReader
    即可模拟数据源。
  • 尽管这可以很好地处理单元测试,但您可能还需要编写一个使用临时文件并确保其读取正确的 集成测试 。(感谢Brice添加该提示!)

不要害怕重构您的类以简化测试,如下所示:

class YourClass {  public int method(File file) {    // do everything here, which is why it requires a mock  }   }class YourRefactoredClass {  public int method(File file) {    return methodForTest(file.getName(), file.isFile(),        file.isAbsolute(), new FileReader(file));  }    int methodForTest(      String name, boolean isFile, boolean isAbsolute, Reader fileContents) {    // actually do the calculation here  }   }class YourTest {  @Test public int methodShouldParseBadHtml() {    YourRefactoredClass yrc = new YourRefactoredClass();    assertEquals(42, yrc.methodForTest(        "bad.html", true, false, new StringReader(badHTMLText));  }   }

在这一点上,逻辑输入

method
非常简单,不值得测试,并且逻辑输入
methodForTest
非常容易访问,可以对其进行大量测试。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5010747.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-15
下一篇 2022-11-14

发表评论

登录后才能评论

评论列表(0条)

保存