Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将属性分配给其他测试将使用的tester类是一种好的做法吗_Python_Unit Testing_Testing_Pytest - Fatal编程技术网

Python 将属性分配给其他测试将使用的tester类是一种好的做法吗

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

我正在用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 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
查看此资源,他在其中详细解释了它的工作原理。