나는 파일을 읽고 그 파일의 내용을 기반으로 사전을 만드는 코드를 작성 중이다. 코드는 매우 간단하지만 가장자리의 경우를 테스트하고 싶습니다. my_dict
빈 사전이기 때문에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" }
불행하게도이 주장이 실패
여기 내 시도입니다.
나의 이해는 NamedTemporaryFile
가 폐쇄되면, 그것은 파괴된다, 그래서 read_file
의 my_dict
이 채워집니다 직접 후 때까지 파괴 기대하지 않습니다. fp
이 두 번 열리고 있습니다 : 한 번 쓰고 한 번 읽으십시오 - 괴롭히는 사람입니까?
파일을 읽는 함수를 테스트하는 올바른 방법입니까? 그렇다면 내 주장이 왜 실패 하나? 그렇지 않은 경우이 테스트를 작성하는 데 더 좋은 메커니즘은 무엇입니까?
당신은()'당신이 그것을 읽으려고하기 전에 데이터가 실제로 파일에 기록됩니다 확인하기 위해 fp.flush'호출 할 필요가 있습니다. – chepner
@chepner Ugh, 그게 다야. 답변을 추가하려면 동의하겠습니다. 그래도 거의 속임수예요. – erip