1
하나의 테스트에서 pytest yield-fixture
을 기본 범위로 여러 번 사용하려고합니다.Python. Pytest fixture coll
@pytest.fixture
def create_temp_file():
nonlocal_maker_data = {'path': None} # nonlocal for python2
def maker(path, data):
nonlocal_maker_data['path'] = path
with open(path, 'wb') as out:
out.write(data)
try:
yield maker
finally:
path = nonlocal_maker_data['path']
if os.path.exists(path):
os.remove(path)
def test_two_call_of_fixture(create_temp_file):
create_temp_file('temp_file_1', data='data1')
create_temp_file('temp_file_2', data='data2')
with open('temp_file_1') as f:
assert f.read() == 'data1'
with open('temp_file_2') as f:
assert f.read() == 'data2'
assert False
# temp_file_2 removed
# temp_file_1 doesn't removed
충돌이 있습니다. 첫 번째 조명기는 청소하지 않습니다. temp_file_1은 제거되지 않지만 두 번째 파일은 잘 제거됩니다. 조명기를 여러 번 사용할 수 있습니까?
추신 : 저는 tmpdir
에 대해 알고 있습니다 - 정상적인 테스트 도구. 이것은 단지 예일뿐입니다.
물론이 예제에서는 생성 된 모든 파일을 비 로컬 목록에 누적하여 제거 할 수 있습니다. 하지만 가장 일반적인 방법을 이해하고 싶습니다. –