是否有检查两个边界的Python assert()方法?

31 投票
4 回答
23007 浏览
提问于 2025-04-17 02:39

在我现在进行的一些单元测试中,我需要在一个变量的值处于两个边界条件之间时通过测试。

就像这样 -

def myTest(self):
    myInt = 5
    self.assertBetween(myInt,3,8)

如果我的变量 myInt 的值在 3 到 8 之间,这个测试就会通过。反之,如果 myInt 的值在这个范围之外,就会失败。

我查看了 Python 文档中的 assert 方法列表,但不知道哪个方法能实现我想要的功能。

谢谢。

4 个回答

10

为了让答案更完整,你可以在自我检查的地方加一个消息,这样会让代码更容易理解。

所以

self.assertTrue(3 <= myInt <= 8, msg="%i is not between 3 and 8" % myInt)

这样做会得到正确的结果,而且你就不需要使用 assertGreaterEqualassertLessEqual 了。

35

Frédéric的建议是使用:

self.assertTrue(3 <= myInt <= 8)

这样会产生类似下面的测试输出:

AssertionError: False is not True

但是这并不能给开发者提供关于myInt这个值到底有什么问题的线索。更详细一点会更好:

self.assertGreaterEqual(myInt, 3)
self.assertLessEqual(myInt, 8)

这样你就能得到更有帮助的测试输出:

AssertionError: 21 not less than or equal to 8

如果你发现自己经常使用这种方式,那么你可以自己写一个断言方法:

def assertBetween(self, value, min, max):
    """Fail if value is not between min and max (inclusive)."""
    self.assertGreaterEqual(value, min)
    self.assertLessEqual(value, max)

注意,如果你要测试的值是一个整数,那么可以结合使用assertInrange

self.assertIn(myInt, range(3, 9))

这样会产生类似下面的测试输出:

AssertionError: 21 not found in range(3, 9)
35

你可以使用 assertTrue() 来实现这个功能:

self.assertTrue(myInt >= 3 and myInt <= 8)

或者,使用Python的比较链式写法:

self.assertTrue(3 <= myInt <= 8)

撰写回答