Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.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 如何避免pytest装置中的状态依赖?_Python_Pytest_Python Unittest - Fatal编程技术网

Python 如何避免pytest装置中的状态依赖?

Python 如何避免pytest装置中的状态依赖?,python,pytest,python-unittest,Python,Pytest,Python Unittest,我正在测试一个数据库,其中该数据库类中的方法必须一个接一个地被调用,以便下一个被测试的方法对数据进行操作 @pytest.fixture(scope="module") def database(): return database.Database() # Expected results result_1 = read_result(1) result_2 = read_result(2) result_3 = read_result(3) def test_

我正在测试一个数据库,其中该数据库类中的方法必须一个接一个地被调用,以便下一个被测试的方法对数据进行操作

@pytest.fixture(scope="module")
def database():
    return database.Database()

# Expected results
result_1 = read_result(1)
result_2 = read_result(2)
result_3 = read_result(3)

def test_a(database):
    database.a() # modifies database fixture
    assert database.a.result == result_1
    
def test_b(database):
    database.b() # requires database fixture to have been modified by a()
    assert database.b.result == result_2
    
def test_c(database):
    database.c() # requires database fixture to have been modified by a() and b()
    assert database.c.result == result_3
这使用了模块范围内的pytest夹具,因此每个测试都会重用它。上面的测试可以工作,但这只是因为它按顺序运行测试。据我所知,这是有状态依赖,我的测试不是孤立的,这在测试中是不好的做法


有什么更好的方法可以做到这一点?

我在这里看到了几个选项:

  • 做一次测试而不是三次
  • 使用do定义运行顺序
  • 为每个测试用例在数据库中预创建实体,并在每次运行时重用它们

我在这里看到几个选项:

  • 做一次测试而不是三次
  • 使用do定义运行顺序
  • 为每个测试用例在数据库中预创建实体,并在每次运行时重用它们

将其作为单一测试不允许对
a
b
c
进行单独测试。排序并不能解决我对依赖性的担忧。至于您的上一个建议,您的意思是说有3个不同的数据库固定装置,每个中间测试步骤一个?将其作为单个测试不允许对
a
b
c
进行单独测试。排序并不能解决我对依赖性的担忧。至于您最后的建议,您的意思是说有3个不同的数据库装置,每个中间测试步骤一个?