测试 运行 来自导入 class
Tests being run from imported class
我有一个基础 class,其中包含一些与此类似的测试:
class TestA:
def test_something(self):
data = self._generate_some_data()
assert something_about_data
def _generate_some_data(self)
return some_data
另一个 class 在 TestA
中重复使用测试逻辑但提供不同的数据:
# This is the line that is giving me a problem
from somemodule import TestA
class TestB(TestA):
def _generate_some_data(self)
return some_other_data
请注意,我这样做并不是简单地在 TestA
中创建另一个测试,因为它们各自测试不同的 class A
和 B
(尽管 classes 具有相同的接口)
我 运行 遇到的问题是,在 TestB
模块中导入 TestA
时,名称是在模块的命名空间中声明的,因此它被 pytest
搜索测试时。
这导致 TestA
测试被 运行 两次:一次是找到并扫描其模块,另一次是扫描 TestB
模块。
我想到了两个解决方案:
- 一个简单的解决方法:在导入时重命名
TestA
以便 pytest
扫描找不到它:
from somemodule import TestA as BaseTestA
class TestB(BaseTestA):
...
- 我可以将通用逻辑提取到抽象 class 中,其名称与
pytest
搜索不匹配,并且可以安全地导入并由两个测试 class 继承。
第一个选项,我不喜欢,因为它看起来很老套。关于第二个选项,我真的不想将逻辑提取到另一个 class.
有没有其他方法可以解决我没有看到的这个问题?
只需使用:
import somemodule
class TestB(somemodule.TestA):
...
我有一个基础 class,其中包含一些与此类似的测试:
class TestA:
def test_something(self):
data = self._generate_some_data()
assert something_about_data
def _generate_some_data(self)
return some_data
另一个 class 在 TestA
中重复使用测试逻辑但提供不同的数据:
# This is the line that is giving me a problem
from somemodule import TestA
class TestB(TestA):
def _generate_some_data(self)
return some_other_data
请注意,我这样做并不是简单地在 TestA
中创建另一个测试,因为它们各自测试不同的 class A
和 B
(尽管 classes 具有相同的接口)
我 运行 遇到的问题是,在 TestB
模块中导入 TestA
时,名称是在模块的命名空间中声明的,因此它被 pytest
搜索测试时。
这导致 TestA
测试被 运行 两次:一次是找到并扫描其模块,另一次是扫描 TestB
模块。
我想到了两个解决方案:
- 一个简单的解决方法:在导入时重命名
TestA
以便pytest
扫描找不到它:
from somemodule import TestA as BaseTestA
class TestB(BaseTestA):
...
- 我可以将通用逻辑提取到抽象 class 中,其名称与
pytest
搜索不匹配,并且可以安全地导入并由两个测试 class 继承。
第一个选项,我不喜欢,因为它看起来很老套。关于第二个选项,我真的不想将逻辑提取到另一个 class.
有没有其他方法可以解决我没有看到的这个问题?
只需使用:
import somemodule
class TestB(somemodule.TestA):
...