Ответ 1
Вы можете использовать assertTrue() для этой цели:
self.assertTrue(myInt >= 3 and myInt <= 8)
Или, используя идиому сравнения цепочек Python:
self.assertTrue(3 <= myInt <= 8)
В некоторых модульных тестах, которые я выполняю сейчас, мне нужно пройти тест, когда переменная находится между двумя граничными условиями.
Что-то вроде -
def myTest(self):
myInt = 5
self.assertBetween(myInt,3,8)
пройдет тест. Или, если myInt лгал вне диапазона от 3 до 8, он потерпел неудачу.
Я просмотрел список методов assert в документации на python и не могу решить, какой из них даст мне такую функциональность.
Спасибо.
Вы можете использовать assertTrue() для этой цели:
self.assertTrue(myInt >= 3 and myInt <= 8)
Или, используя идиому сравнения цепочек Python:
self.assertTrue(3 <= myInt <= 8)
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)
Обратите внимание, что если значение, подлежащее тестированию, известно как целое число, вы можете использовать assertIn
вместе с range
:
self.assertIn(myInt, range(3, 9))
что приводит к тестовому результату следующим образом:
AssertionError: 21 not found in range(3, 9)
чтобы добавить ответ, вы можете добавить msg в self.assertTrue и сделать его более удобочитаемым
так
self.assertTrue(3 <= myInt <= 8, msg="%i is not between 3 and 8" % myInt)
даст правильный выход, и вам не нужно делать assertGreaterEqual
и assertLessEqual
.
Существует assertAlmostEqual, главным аргументом которого является сравнение чисел с плавающей запятой. Но с параметром delta
вы можете использовать его для ints:
self.assertAlmostEqual(9, 5, delta=3)
И это дает вам осмысленное сообщение об ошибке:
AssertionError: 9 != 5 within 3 delta