我在 python 测试函数中有多个断言语句。如下所示,
def test_function():
assert A.a == 1
assert B.b == 2
assert C.c == 3
assert D.d == 4
assert E.e == 5
assert F.f == 6
assert G.g == 7
我只是想以适当的动态方式写这个,
我试过:
import unittest
def test_function():
x = {"a": A.a, "b": B.b, "c": C.c, "d": D.d, "e": E.e, "f":F.f, "g":G.g}
y = {"a": 1, "b": 2, "c": 3, "d": 4, "e": 5, "f":6, "g":7}
for k, v in x.items():
for k1, v1 in y.items():
if k == k1 and v==v1:
assert v == v1
但我发现这也不是好方法,不需要
"if"
,但是如果我删除那个if
声明是通过错误。
任何更好的方法来合并这个
assert
语句
编辑: 或者简单地说,我可以将所有
A.a, B.a....
和1, 2, ..
放在如下列表中,
l1 = [A.a, B.b, C.c, D.d, E.e, F.f, G.g]
l2 = [1, 2, 3, 4, 5, 6, 7]
并从中做出断言声明,
assert l1[0] == l2[0]
assert l1[1] == l2[1].......
没有任何内置功能
简化代码的一种方法是使用
assertDictEqual()
模块中的 unittest
方法。以下是如何使用它的示例:
import unittest
class TestFunction(unittest.TestCase):
def test_function(self):
expected = {"a": 1, "b": 2, "c": 3, "d": 4, "e": 5, "f": 6, "g": 7}
actual = {"a": A.a, "b": B.b, "c": C.c, "d": D.d, "e": E.e, "f": F.f, "g": G.g}
self.assertDictEqual(expected, actual)
这将比较预期的和实际的字典,如果它们不相等则引发断言错误。字典中的键必须匹配,因此请确保它们在两个字典中的拼写相同。
您还可以通过传递第三个参数向
assertDictEqual()
方法添加自定义错误消息。例如:
self.assertDictEqual(expected, actual, "The dictionaries do not match.")
这将打印“词典不匹配”。如果断言失败。
=====================================
编辑: 即使您没有用于测试函数的类,您仍然可以使用 unittest.TestCase 类。以下是如何修改代码以使用 unittest 模块的示例:
import unittest
def test_function():
expected = {"a": 1, "b": 2, "c": 3, "d": 4, "e": 5, "f": 6, "g": 7}
actual = {"a": A.a, "b": B.b, "c": C.c, "d": D.d, "e": E.e, "f": F.f, "g": G.g}
assertDictEqual(expected, actual)
if __name__ == '__main__':
unittest.main()