Подтвердить что ты не робот

Существует ли метод python assert(), который проверяет две границы?

В некоторых модульных тестах, которые я выполняю сейчас, мне нужно пройти тест, когда переменная находится между двумя граничными условиями.

Что-то вроде -

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

пройдет тест. Или, если myInt лгал вне диапазона от 3 до 8, он потерпел неудачу.

Я просмотрел список методов assert в документации на python и не могу решить, какой из них даст мне такую ​​функциональность.

Спасибо.

4b9b3361

Ответ 1

Вы можете использовать assertTrue() для этой цели:

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

Или, используя идиому сравнения цепочек Python:

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

Ответ 2

Предложение Фредерика:

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)

Ответ 3

чтобы добавить ответ, вы можете добавить msg в self.assertTrue и сделать его более удобочитаемым

так

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

даст правильный выход, и вам не нужно делать assertGreaterEqual и assertLessEqual.

Ответ 4

Существует assertAlmostEqual, главным аргументом которого является сравнение чисел с плавающей запятой. Но с параметром delta вы можете использовать его для ints:

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

И это дает вам осмысленное сообщение об ошибке:

AssertionError: 9 != 5 within 3 delta