Python 将属性分配给其他测试将使用的tester类是一种好的做法吗
我正在用pytest为我的python应用程序编写单元测试 我正在测试的模块有许多方法,这些方法将按顺序调用,它们的返回将用作其他方法的参数。简言之,我所拥有的是这样的:Python 将属性分配给其他测试将使用的tester类是一种好的做法吗,python,unit-testing,testing,pytest,Python,Unit Testing,Testing,Pytest,我正在用pytest为我的python应用程序编写单元测试 我正在测试的模块有许多方法,这些方法将按顺序调用,它们的返回将用作其他方法的参数。简言之,我所拥有的是这样的: def foo_1(): #load file and do stuff return bar_1 def foo_2(arg1): #do stuff with arg1 return bar_2 def foo_3(arg1, arg2): #do stuff with arg1
def foo_1():
#load file and do stuff
return bar_1
def foo_2(arg1):
#do stuff with arg1
return bar_2
def foo_3(arg1, arg2):
#do stuff with arg1 and arg2
return bar_3
x = foo_1()
y = foo_2(x)
z = foo_3(x,y)
非常基本的东西,以下是我正在运行的测试:
import foo_app
class TestClass:
def test_foo_1(self):
self.x = foo_app.foo_1()
#never mind the assertions
assert 0 == self.x
def test_foo_2(self):
self.y = foo_app.foo_2(self.x)
#never mind the assertions
assert 1 == self.y
def test_foo_3(self):
self.z = foo_app.foo_3(self.x, self.y)
#never mind the assertions
assert 3 == self.z
然而,我想知道这是否是单元测试的良好实践,如果不是,那么处理这种情况的最佳方法是什么?在这种情况下,我依靠以前方法的执行来实现我的结果?您可以使用yield实现所需的行为。可用于维护执行顺序
def foo_1():
#load file and do stuff
return bar_1
def foo_2(arg1):
#do stuff with arg1
return bar_2
def foo_3(arg1, arg2):
#do stuff with arg1 and arg2
return bar_3
def run():
arg1 = foo_1()
yield
arg2 = foo_2(arg1)
yield
arg3 = foo_3(arg1,arg2)
yield
for steps in run():
pass
查看此资源,他在其中详细解释了它的工作原理。