如何为 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()
您应该发现 assertTrue
或 assertFalse
的行为与 assertLessEqual
的行为相同,具有以下描述:
Just like self.assertTrue(a <= b)
, but with a nicer default message.
您应该会发现许多单元测试方法只是 assertTrue
或 assertFalse
调用的良好包装器。
当然,解决您的问题的一种简单方法是在您的 assertLessEqual
调用中重新排列 a
和 b
,或者改为用户 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
我想像这样检查多个断言,并且在第一行代码抛出断言错误之后。有人可以帮助我如何理解这个断言。我知道可以通过 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()
您应该发现 assertTrue
或 assertFalse
的行为与 assertLessEqual
的行为相同,具有以下描述:
Just like
self.assertTrue(a <= b)
, but with a nicer default message.
您应该会发现许多单元测试方法只是 assertTrue
或 assertFalse
调用的良好包装器。
当然,解决您的问题的一种简单方法是在您的 assertLessEqual
调用中重新排列 a
和 b
,或者改为用户 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