如何为 python unittest 编写多个 assertLessEqual 方法

how to write multiple assertLessEqual methods for python unittest

我想像这样检查多个断言,并且在第一行代码抛出断言错误之后。有人可以帮助我如何理解这个断言。我知道可以通过 try-except 来实现,但是有没有其他方法可以以单元测试方式进行。还请告诉我,此功能与多个 AssertTrue、AssertFalse 方法不同的原因是什么?

import unittest

class Test1(unittest.TestCase):
    def test_between(self):
        print ("before")
        self.assertLessEqual(999, 998, "Not less")  # After this next line is not executing because this is throwing an "AssertionError: 999 not less than or equal to 998 : Not less"
                                                    # How can I catch this error, I know one way is through try,Except... but is there any proper solution available?
        print ("after")
        self.assertLessEqual(999, 500, "Not less")  # 2nd Assertion

if __name__ == '__main__':
    unittest.main()

感谢任何形式的帮助。

此致

您可以尝试的一种方法是 assertRaises 并从 with 块中调用 assertLessEqual 方法:

import unittest


class Test1(unittest.TestCase):
    def test_between(self):
        with self.assertRaises(AssertionError) as e:
            self.assertLessEqual(999, 998, "Not less")

        with self.assertRaises(AssertionError) as e:
            self.assertLessEqual(999, 500, "Not less")


if __name__ == '__main__':
    unittest.main()

您应该发现 assertTrueassertFalse 的行为与 assertLessEqual 的行为相同,具有以下描述:

Just like self.assertTrue(a <= b), but with a nicer default message.

您应该会发现许多单元测试方法只是 assertTrueassertFalse 调用的良好包装器。

当然,解决您的问题的一种简单方法是在您的 assertLessEqual 调用中重新排列 ab,或者改为用户 assertGreaterEqual


如果你有大量类似运行的测试,你也可以看看subTest。这允许您 运行 多个变量的相同测试代码:

import unittest

class Test1(unittest.TestCase):
    def test_between(self):
        for i in range(10):
            with self.subTest(i=i):
                self.assertLessEqual(i, 5)

if __name__ == '__main__':
    unittest.main()

以上测试失败4次,其中一个例子:

FAIL: test_between (__main__.Test1) (i=9)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "scratchpad.py", line 7, in test_between
    self.assertLessEqual(i, 5)
AssertionError: 9 not less than or equal to 5