如何在 unittest python 中合并或转换多个断言语句

问题描述 投票:0回答:1

我在 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].......

没有任何内置功能

python unit-testing python-unittest assert
1个回答
0
投票

简化代码的一种方法是使用

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()
© www.soinside.com 2019 - 2024. All rights reserved.