我在 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].......
没有任何内置功能
如果您使用
unittest
,则需要将测试放在扩展 unittest.TestCase
的类中。然后你可以使用assertEqual()
中的unittest.TestCase
方法:
import unittest
def MyTests(unittest.TestCase):
def test_function(self):
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}
self.assertEqual(x, y)
另一方面,如果您使用
pytest
,则只需 assert x == y
:
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}
assert x == y
如果您想以正确的动态方式执行测试而不使用Python
unittest
,您可以使用以下test_function()
:
def test_function():
l1 = [A.a, B.b, C.c, D.d, E.e, F.f, G.g]
l2 = [1, 2, 3, 4, 5, 6, 7]
for i in range(0, len(l1)):
assert l1[i] == l2[i]
以前的代码使用问题编辑部分中定义的列表
l1
和 l2
。
此外,我认为使用
unittest
模块更好,在这种情况下,您可以参考 @Code-Apprentice 的答案。