可以利用类继承来组织使用pytest的测试吗?

时间:2013-10-16 00:25:42

标签: python pytest

我使用Pytest通过Python模型测试硬件。

我当前的conftest设置允许我通过funcargs实例化Python模型,我喜欢。

def test_part1(target):
    ...

def test_part2(target):
    ...

我的模型有一个深层但简单的单继承结构:

class A():
    def __init__:
        self.attributes_added_by_class_A
        ...

class B(A):
    def __init__:
        super().__init__()
        self.attributes_added_by_class_B
        ...

我的pytests目前看起来像这样:

def test_part1(target):
    call_test_for_attributes_set_by_class_A(target)
    call_test_for_attributes_set_by_class_B(target)
    call_tests_specific_to_part1(target)

def test_part2(target):
    call_test_for_attributes_set_by_class_A(target)
    call_test_for_attributes_set_by_class_B(target)
    call_tests_specific_to_part2(target)

...

我希望避免重复call_test_for_attributes_set_by_class_A(target)等等。

如何组织/创建我的pytests,以便我不会经常重新编写代码来测试每个目标通过其继承所共有的属性?换句话说,如果Part1和Part2都继承自A类,则它们都具有由A类指定的属性。

有没有什么方法可以使用Python的类继承结构来允许我的pytests反映与我的对象相同的继承?换句话说,是否可能出现以下情况?

class PytestA():
    def test_attributes_set_by_class_A()

class PytestB(PytestA):
    def test_attributes_set_by_class_B()

test_all = PytestB(target)

我试图弄清楚上面如何接收target参数,因为__init__()现在在pytest类中被允许(?)。

我使用的是Python3

1 个答案:

答案 0 :(得分:2)

我认为你想要一个依赖于另一个灯具的灯具。见Modularity: using fixtures from a fixture function。也许你想要一个通用的target夹具,然后是targetA夹具和一个targetB夹具。我不完全理解你的测试是如何工作的,所以我很犹豫根据你所写的内容给出一个例子。