开发者

Is there a python assert() method which checks between two boundaries?

In some unit testing I'm currently doing, I need to pass a test when a variable lies between two boundary conditions.

Something like -

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

开发者_高级运维would pass the test. Or if myInt lied outside of the range 3 to 8 it would fail.

I've looked down the list of assert methods in the python documentation and can't work out which one would give me this sort of functionality.

Thanks.


You can use assertTrue() for that purpose:

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

Or, using Python's comparison chaining idiom:

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


Frédéric's suggestion to use:

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

results in test output like this:

AssertionError: False is not True

which gives the developer no clue as to what the problematic value of myInt actually was. It is better to be more long-winded:

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

because then you get helpful test output like this:

AssertionError: 21 not less than or equal to 8

If you find yourself using this idiom a lot, then you can write your own assertion method:

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

Note that if the value to be tested is known to be an integer, then you can use assertIn together with range:

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

which results in test output like this:

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


to complement the answer, you can add a msg to self.assertTrue and make it more readable

so

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

would yield the right output and you wont need to do assertGreaterEqual and assertLessEqual.


There is assertAlmostEqual which main use case is to compare floating point numbers. But with the delta parameter you can use it for ints:

self.assertAlmostEqual(9, 5, delta=3)

And this gives you meaningful error message:

AssertionError: 9 != 5 within 3 delta
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜