相关疑难解决方法(0)

将(yield)装置作为测试参数传递(使用临时目录)

问题

是否可以将生成的 pytest 固定装置(用于设置和拆卸)作为参数传递给测试函数?

语境

我正在测试一个在单个目录中的文件中读取和写入数据的对象。该目录的路径保存为对象的属性。

我遇到以下问题:

  1. 在我的测试中使用临时目录;和
  2. 确保每次测试后删除该目录。

例子

考虑以下内容(test_yieldfixtures.py):

import pytest, tempfile, os, shutil
from contextlib import contextmanager
    
@contextmanager
def data():
    datadir = tempfile.mkdtemp()  # setup
    yield datadir
    shutil.rmtree(datadir)        # teardown
    
class Thing:
    def __init__(self, datadir, errorfile):
        self.datadir = datadir
        self.errorfile = errorfile

    
@pytest.fixture
def thing1():
    with data() as datadir:
        errorfile = os.path.join(datadir, 'testlog1.log')
        yield Thing(datadir=datadir, errorfile=errorfile)

@pytest.fixture
def thing2():
    with data() as datadir:
        errorfile = os.path.join(datadir, 'testlog2.log')
        yield Thing(datadir=datadir, errorfile=errorfile)

@pytest.mark.parametrize('thing', [thing1, thing2])
def test_attr(thing):
    print(thing.datadir)
    assert …
Run Code Online (Sandbox Code Playgroud)

python pytest

5
推荐指数
1
解决办法
7139
查看次数

标签 统计

pytest ×1

python ×1