【发布时间】:2016-06-10 13:33:37
【问题描述】:
我正在编写读取文件并根据该文件的内容创建字典的代码。代码非常简单,但我想测试边缘情况。
这是我的尝试:
from tempfile import NamedTemporaryFile
from nose.tools import *
def read_file(filename):
with open(filename) as f:
my_dict = { dict(line.strip().split(',')) for line in f }
return my_dict
def test_read_file():
file_contents = b"""Hello,World"""
with NamedTemporaryFile() as fp:
fp.write(file_contents)
my_dict = read_file(fp.name)
print(my_dict)
assert my_dict == { "Hello" : "World" }
很遗憾,这个断言失败了,因为my_dict 是一个空字典。
我的理解是,一旦NamedTemporaryFile 被关闭,它就会被销毁,所以我不希望它在read_file 的my_dict 填充后直接 被销毁。 fp 被打开了两次:一次写一次读——这是麻烦制造者吗?
这是测试读取文件的函数的正确方法吗?如果是这样,为什么我的断言失败了?如果不是,那么编写此测试的更好机制是什么?
【问题讨论】:
-
您可能需要调用
fp.flush()以确保在您尝试读取之前将数据实际写入文件。 -
@chepner 呃,就是这样。如果您想添加答案,我会接受。不过,这几乎可以肯定是一个骗局。
标签: python unit-testing python-3.x nose temporary-files