使用测试夹具作为 class 方法进行测试 (PyTest)
Tests with test fixtures as class methods (PyTest)
在 PyTest
中组织测试时,我看到可以在测试 class 中定义测试方法,如下所示:
class TestBasicEquality:
def test_a_equals_b(self):
assert 'a' == 'b'
如果我们想编写一个必须使用 PyTest 夹具的测试 (test_client
) client
我们会这样做:
def test_client(client):
# assert client.something == something
但是我们如何在测试 class 中组织 test_client
?我尝试使用 @pytest.mark.usefixtures(client)
作为测试 class 的装饰器,但没有成功。
谁能告诉我如何 and/or 指向 guide/documentation 以便我理解?
也许 隐藏在这一切背后的一个问题:我们什么时候应该(或不应该)将 pytest 测试放在 class 中? (现在才开始学习PyTest..) ?
在您给定的情况下,您只需将夹具作为另一个方法参数包括在内:
class TestSomething:
def test_client(self, client):
assert client.something == "something"
那么 类 有什么用呢?就个人而言,我很少需要将它们与 pytest 一起使用,但您可以将它们用于:
- 在一个文件中进行多组测试,并且能够 运行 只有一组:
pytest ./tests/test.py::TestSomething
- 为每个测试方法执行一个夹具,而这些方法不一定需要访问夹具本身。 example from the documentation 是每个方法之前的自动清理。那就是你发现的
@pytest.mark.usefixtures()
- 有一个 automatically run once for every test class by defining a fixture's scope 到
class
的夹具:@pytest.fixture(scope="class", autouse=True)
在 PyTest
中组织测试时,我看到可以在测试 class 中定义测试方法,如下所示:
class TestBasicEquality:
def test_a_equals_b(self):
assert 'a' == 'b'
如果我们想编写一个必须使用 PyTest 夹具的测试 (test_client
) client
我们会这样做:
def test_client(client):
# assert client.something == something
但是我们如何在测试 class 中组织 test_client
?我尝试使用 @pytest.mark.usefixtures(client)
作为测试 class 的装饰器,但没有成功。
谁能告诉我如何 and/or 指向 guide/documentation 以便我理解?
也许 隐藏在这一切背后的一个问题:我们什么时候应该(或不应该)将 pytest 测试放在 class 中? (现在才开始学习PyTest..) ?
在您给定的情况下,您只需将夹具作为另一个方法参数包括在内:
class TestSomething:
def test_client(self, client):
assert client.something == "something"
那么 类 有什么用呢?就个人而言,我很少需要将它们与 pytest 一起使用,但您可以将它们用于:
- 在一个文件中进行多组测试,并且能够 运行 只有一组:
pytest ./tests/test.py::TestSomething
- 为每个测试方法执行一个夹具,而这些方法不一定需要访问夹具本身。 example from the documentation 是每个方法之前的自动清理。那就是你发现的
@pytest.mark.usefixtures()
- 有一个 automatically run once for every test class by defining a fixture's scope 到
class
的夹具:@pytest.fixture(scope="class", autouse=True)