gpt4 book ai didi

python - 在模块中的测试文件之间传递 py.test fixture

转载 作者:太空狗 更新时间:2023-10-30 01:57:13 24 4
gpt4 key购买 nike

我有一个通用的 py.test fixture ,我想在同一模块的不同测试文件中普遍使用它。阅读 py.test 文档后,建议将 fixture 添加到 conftest.py 文件,该文件应使 fixture 可用于模块中的所有文件。但出于某种原因,我似乎无法让这个通用装置与我的测试类一起工作。

#In conftest.py

import pytest

@pytest.fixture
def mock_data(scope="module"):
return ({'number_of_females_1': 14,
'number_of_females_2': 3,
'number_of_females_3': 19,
'number_of_males_1': 37)}

然后在我的测试类文件中有

Import pytest
from unittest import TestCase

@pytest.mark.usefixtures('mgmt_data')
class Test_param_sweeps(TestCase):

def test_Base_model(self, mgmt_data):
from pyugend.pyugend.Models import Base_model
t = Base_model(**mgmt_data)
assert isinstance(t, Base_model)

文档说我不必导入 mgmt_data fixture 或任何东西。

我在运行这个测试用例时得到的错误是:

self = <pyugend.tests.test_param_sweeps.Test_param_sweeps testMethod=test_Base_model>
result = <TestCaseFunction 'test_Base_model'>

def run(self, result=None):
orig_result = result
if result is None:
result = self.defaultTestResult()
startTestRun = getattr(result, 'startTestRun', None)
if startTestRun is not None:
startTestRun()

result.startTest(self)

testMethod = getattr(self, self._testMethodName)
if (getattr(self.__class__, "__unittest_skip__", False) or
getattr(testMethod, "__unittest_skip__", False)):
# If the class or method was skipped.
try:
skip_why = (getattr(self.__class__, '__unittest_skip_why__', '')
or getattr(testMethod, '__unittest_skip_why__', ''))
self._addSkip(result, self, skip_why)
finally:
result.stopTest(self)
return
expecting_failure_method = getattr(testMethod,
"__unittest_expecting_failure__", False)
expecting_failure_class = getattr(self,
"__unittest_expecting_failure__", False)
expecting_failure = expecting_failure_class or expecting_failure_method
outcome = _Outcome(result)
try:
self._outcome = outcome

with outcome.testPartExecutor(self):
self.setUp()
if outcome.success:
outcome.expecting_failure = expecting_failure
with outcome.testPartExecutor(self, isTest=True):
> testMethod()
E TypeError: test_Base_model() missing 1 required positional argument: 'mgmt_data'

/home/krishnab/anaconda3/envs/py35_gu/lib/python3.5/unittest/case.py:600: TypeError

我不确定错误是什么?它说我缺少一个位置参数,但是 mgmt_data() 不接受任何参数,而 Base_model() 类只接受一个参数,即 **mgmt_data

最佳答案

我想出了答案。问题是我使用的是 Unittest 类型类而不是 py.test 类型类。从技术上讲,两者都可以与 py.test 一起使用,但只有 py.test 类型的类可以访问 fixture。

所以我只是改变了:

from unittest import TestCase    

@pytest.mark.usefixtures('mgmt_data')
class Test_param_sweeps(TestCase):

在 OP 中,到以下内容:

import pytest

@pytest.mark.usefixtures('mgmt_data')
class Test_param_sweeps:

def test_Base_model(self, mgmt_data):
from pyugend.pyugend.Models import Base_model
t = Base_model(**mgmt_data)
assert isinstance(t, Base_model)

问题已解决。

关于python - 在模块中的测试文件之间传递 py.test fixture,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43061100/

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