在单元测试,我可以在一个班级设置变量,那么这个类的方法可以选择任何一个变量,它希望使用...
class test_class(unittest.TestCase):
def setUp(self):
self.varA = 1
self.varB = 2
self.varC = 3
self.modified_varA = 2
def test_1(self):
do_something_with_self.varA, self.varB
def test_2(self):
do_something_with_self_modified_varA, self.varC
因此,在单元测试,很容易把一些测试在一起,可能有类去下,然后使用许多不同的变量(内翻varB)为不同的方法。在pytest,我创建了conftest.py夹具,而不是在单元测试类,像这样...
@pytest.fixture(scope="module")
def input1():
varA = 1
varB = 2
return varA, varB
@pytest.fixture(scope="module")
def input2():
varA = 2
varC = 3
return varA, varC
我喂这个输入1和输入2到我的功能在不同的文件(让我们说test_this.py)两个不同的功能。下面是根据上述信息的问题...
在此先感谢您的回答。
1)首先你可以声明这些灯具不仅在conftest.py,但你希望每一个Python模块。你可以导入模块。另外,作为您使用的设置方法,你可以使用固定装置以同样的方式:
@pytest.fixture(scope='class')
def input(request):
request.cls.varA = 1
request.cls.varB = 2
request.cls.varC = 3
request.cls.modified_varA = 2
@pytest.usefixtures('input')
class TestClass:
def test_1(self):
do_something_with_self.varA, self.varB
def test_2(self):
do_something_with_self_modified_varA, self.varC
或者你可以定义不同的灯具单独的变量:
def fixture_a():
return varA
def fixture_b():
return varB
def fixture_c():
return varC
def fixture_mod_A():
return modified_varA
或使一个夹具返回所有的变量(为什么不呢?),甚至使间接参数化夹具由你选择(相当混乱的方式)返回变量:
@pytest.fixture()
def parametrized_iput(request):
vars = {'varA': 1, 'varB': 2, 'varC': 3}
var_names = request.param
return (vars[var_name] for var_name in var_names)
@pytest.mark.parametrize('parametrized_iput', [('varA', 'varC')], indirect=True)
def test_1(parametrized_iput)
varA, varC = parametrized_iput
...
甚至可以使灯具的工厂,这将使灯具为你的飞行。听起来奇怪,当你只有5次测试和变量5点的配置,但是当你得到数百双方的,也可以是有用的。
3)五言你可以。不过我建议你不要直接导入此文件,但使用命令行选项指向导入哪些文件。在这种情况下,你可以用cohoose变量另一个文件而无需修改代码。
4)我用班在我的测试中,因为我从nosetest迁移。我没有在pytest使用类提任何问题。
5)在这种情况下,我建议你做到以下几点:拳头做出与所需的操作功能:
def some_actions(a, b):
# some actions here
...
return c
然后用它无论是在测试和夹具:
def test():
assert some_actions(1,2) == 10
@pytest.fixture()
def some_fixture():
return some_actions(1,2)
我觉得单元测试更容易阅读。对于新的测试,单元测试是很容易的。这是工作的开箱。你依赖于Python实现,但他们不会改变接口未来几年。
我喜欢我的组织测试,以这样的方式,我有每个文件最大1次测试。在这种情况下,我不依赖于类......但我导入类从每一个测试做的东西。
有些网站抱怨颜色的单元测试是不可能的。我认为这是一个笑话,因为我的单元测试创建詹金斯和其他JUNIT输出报告。有伟大的工具(甚至1个文件)JUnit的转换到一个网站,这不是一个测试工具的责任。
此外,一些人抱怨,你需要大量的代码来启动一个单元测试。我不同意,它需要4行代码来创建单元测试!但Pytest需要知道所有的困难注解,这是不正常的一个简单的Python开发。
一个重要的原因还在于,单元测试将保持自由。但是,如果你想使用pytest出于某种原因(到位桶等),也有工具来转换您的测试,使代码的可读性。
玩得开心!