gpt4 book ai didi

python-3.x - 如何创建自己的 pytest fixture ?

转载 作者:行者123 更新时间:2023-12-04 16:46:02 25 4
gpt4 key购买 nike

我想创建我自己的 pytest 固定装置,我可以在其中插入我希望它在设置和拆卸阶段执行的操作。

我正在寻找这样的东西(在这个例子中,我创建了一个测试所需的文件):

@pytest.fixture
def file(path, content):
def setup():
# check that file does NOT exist
if os.path.isfile(path):
raise Exception('file already exists')

# put contents in the file
with open(path, 'w') as file:
file.write(content)
def teardown():
os.remove(path)

我希望能够像这样使用它:
def test_my_function(file):
file('/Users/Me/myapplication/info.txt', 'ham, eggs, orange juice')
assert my_function('info') == ['ham', 'eggs', 'orange juice']

我知道已经有 tempdir pytest 中具有类似功能的 fixture 。不幸的是,该 fixture 只会在 /tmp 内的某处创建文件。目录,我的应用程序中需要文件。

谢谢!

更新:
我越来越接近了。以下几乎有效,但它没有像我预期的那样将全局 PATH 变量设置为 fixture 。我想知道我是否可以为我的装置创建一个类而不是一个函数。
@pytest.fixture
def file(request):
PATH = None
def setup(path, content):
PATH = path

# check that file does NOT exist
if os.path.isfile(PATH):
raise Exception('file already exists')

# put contents in the file
with open(PATH, 'w+') as file:
file.write(content)
def teardown():
os.remove(PATH)
request.addfinalizer(teardown)
return setup

最佳答案

这有点疯狂,但这里有一个解决方案:

@pytest.fixture
def file(request):
class File:
def __call__(self, path, content):
self.path = path

# check that file does NOT exist
if os.path.isfile(self.path):
raise Exception('file already exists')

# put contents in the file
with open(self.path, 'w+') as file:
file.write(content)
def teardown(self):
os.remove(self.path)
obj = File()
request.addfinalizer(obj.teardown)
return obj

关于python-3.x - 如何创建自己的 pytest fixture ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37624566/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com