我正在編寫讀取文件並根據該文件內容創建字典的代碼。代碼非常簡單,但我想測試邊緣情況。爲什麼我的斷言在讀取NamedTemporaryFile時失敗?
這裏是我的嘗試:
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
@chepner呃,就是這樣。如果您想添加答案,我會接受它。不過,這幾乎肯定是一個騙局。 – erip