Python中文件相关函数的测试

1 投票
3 回答
691 浏览
提问于 2025-04-16 10:14

我对软件测试还挺陌生的。我想知道如何为Python中的文件相关函数写单元测试。例如,如果我有一个文件复制的函数,如下所示。

def copy_file (self):   
    if not os.path.isdir(dest_path):
        os.makedirs(dest_path)
    try:
        shutil.copy2(src_path, dest_path)
    except IOError as e:
        print e

我应该怎么测试这个函数呢?我应该检查什么(比如目录、文件内容、异常等)?

3 个回答

0

想想你对这个方法的要求,比如:

  • 如果源目录(source_dir)不存在,或者源目录和目标目录(destination_dir)无法访问,这个方法应该报告一个错误。
  • 如果目标目录不存在,方法应该创建它;如果创建失败,也要报告一个错误。
  • 如果源目录或目标目录有不合法的值(比如null或者目录名中有不合法的字符),方法也要报告一个错误。
  • 这个方法应该把所有文件从源目录复制到目标目录
    • 要检查是否所有文件都已经被复制。
  • 这个方法应该可以替换已有的文件(可能会
    • 要检查是否已有的文件被替换了。

这些只是一些想法。不要把所有可能的要求都列出来,也不要测试得过于复杂,要记住你想用这个方法做什么。如果这个方法是私有的,或者只在你自己的代码中使用,你可以缩小范围;但如果你要提供一个公共的API,那就必须确保任何输入都有一个明确的结果(这可能是一个错误信息)。

1

我觉得你可以从test_shutil这个文件里找到一些线索,看看它是怎么测试复制功能的。简单来说,它是通过移动文件并使用另一个模块来检查文件是否存在。标准的shutil.copy和你自己写的包装函数在处理目标文件夹时的表现是不同的,特别是当目标文件夹还不存在的时候。在shutil.copy2中,如果目标文件夹不存在,它会创建一个新的文件,并把源文件移动过去。而在你的情况下,如果目标文件夹不存在,它会创建一个目标文件夹,然后把源文件移到这个文件夹里。所以你需要写一些测试,确保在目标文件夹不存在的情况下,运行你的包装函数后,目标依然是一个文件夹,并且里面包含了shutil移动过来的文件。

1

你可以相信shutil.copy2这个功能会正确地复制内容。你只需要测试一下你自己的代码。这里的意思是要检查它是否会在目录不存在的时候自动创建这些目录,并且能处理输入输出错误。

还有,别忘了清理一下哦。;)

撰写回答