gpt4 book ai didi

python - 使用多个测试用例测试一个功能但只使用一个断言?

转载 作者:行者123 更新时间:2023-12-04 16:45:17 24 4
gpt4 key购买 nike

我有一个类方法,它接受一个列表并根据函数确定该列表是否有效。

我想在存储为静态变量的三个列表上对其进行测试,因为它们稍后会在代码中的其他单元测试中使用。

def test__validate(self):
decoder = Validator()
slow_valid = Validator.validate(TestValidator.list_slow)
med_valid = Validator.validate(TestValidator.list_med)
fast_valid = Validator.validate(TestValidator.list_fast)


assert slow_valid == True
assert med_valid == False
assert fast_valid == False

删除多个断言语句的正确方法是什么?

我是否定义了 test__validate 的多个版本,或者多个断言语句是否符合最佳实践?

最佳答案

正如@IanShelvington 所提议的,使用更改的输入(和结果,在您的情况下)重复测试的最佳实践是测试参数化。使用 pytest,您可以执行如下操作:

import pytest

@pytest.mark.parametrize("val_list, result",
[(TestValidator.list_slow, True),
(TestValidator.list_med, False),
(TestValidator.list_fast, False)])

def test_validate(val_list, result):
assert Validator().validate(val_list) == result

这给你输出:

============================= test session starts =============================
...
collecting ... collected 3 items

param_result.py::test_validate[val_list0-True] PASSED [ 33%]
param_result.py::test_validate[val_list1-False] PASSED [ 66%]
param_result.py::test_validate[val_list2-False] PASSED [100%]

============================== 3 passed in 0.04s ==============================

如您所见,这将创建 3 个单独的测试,名称中包含参数,因此可以轻松识别失败的测试。

如果您想要显示的测试的自定义名称,您可以使用 ids 提供它们:

@pytest.mark.parametrize("val_list, result",
[(TestValidator.list_slow, True),
(TestValidator.list_med, False),
(TestValidator.list_fast, False)],
ids=('slow', 'med', 'fast'))
...

这将输出:

============================= test session starts =============================
...
param_result.py::test_validate[slow] PASSED [ 33%]
param_result.py::test_validate[med] PASSED [ 66%]
param_result.py::test_validate[fast] PASSED [100%]

============================== 3 passed in 0.06s ==============================

关于python - 使用多个测试用例测试一个功能但只使用一个断言?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61437278/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com