如何将多个断言语句转换或合并为一个

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

我在 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
2个回答
2
投票

如果您使用

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

0
投票

如果您想以正确的动态方式执行测试而不使用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 的答案。

© www.soinside.com 2019 - 2024. All rights reserved.