gpt4 book ai didi

unit-testing - 如何对将文件保存到磁盘进行单元测试?

转载 作者:行者123 更新时间:2023-12-03 11:33:58 25 4
gpt4 key购买 nike

我知道强烈建议将单元测试与文件系统分开运行,因为如果您在测试中触摸文件系统,您也会测试文件系统本身。好的,这很合理。
我的问题是,如果我想测试保存到磁盘的文件,我该怎么办?与数据库一样,我分离了一个负责数据库访问的接口(interface),然后为我的测试创建另一个实现?或者可能有其他方法?

最佳答案

在编写执行文件 I/O 的单元测试时要小心谨慎,因为它们往往太慢了。但是在单元测试中并没有绝对禁止文件 I/O。

在您的单元测试中设置和拆除一个临时目录,并在该临时目录中创建测试文件和目录。是的,您的测试会比纯 CPU 测试慢,但它们仍然会很快。 JUnit 甚至有支持代码来帮助解决这种情况:@RuleTemporaryFolder .

也就是说,大多数文件编写代码采用这种形式:

  • 打开文件的输出流。此代码必须处理丢失的文件或文件权限问题。您将需要测试它是否打开了文件并处理了这些故障情况。
  • 写入输出流。这必须以正确的格式写入,这是最复杂的部分,需要最多的测试。它必须在写入输出流时处理 I/O 错误,尽管这些错误在实践中很少见。
  • 关闭输出流。这必须在关闭流时处理 I/O 错误,尽管这些错误在实践中很少见。

  • 只有第一个真正处理文件系统。其余的只是使用输出流。

    因此,您可以将中间部分和最后一部分提取到它自己的方法(函数)中,该方法操作给定的输出流,而不是命名文件。然后,您可以模拟该输出流以对该方法进行单元测试。这些单元测试将非常快。大多数编程语言已经提供了合适的输出流类。

    只剩下第一部分进行单元测试。你只需要几个测试,所以你的测试套件应该仍然是可以接受的快。

    关于unit-testing - 如何对将文件保存到磁盘进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3381801/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com