Я тестирую функцию проверки, которую я использую с Sanic.
def validate(val):
try:
if isinstance(val, bool): # Here because the int(val) line will success with int(True)/int(False)
raise ValueError()
if isinstance(val, float):
print("IT'S FLOAT!")
raise ValueError()
if '.' in str(val):
raise ValueError()
n = int(val)
except ValueError as ex:
raise InvalidUsage('Invalid value "{}" for int param "n"'.format(val))
Я проверяю это по значениям с плавающей запятой и использую гипотезу для генерации условий теста.
@given(val=st.floats())
def test_validate_int_float(val):
with pytest.raises(InvalidUsage) as ex:
validate(val)
print("{}|{}|{}".format(ex.value, f'Invalid value "{val}" for int param "n"',
ex.value == f'Invalid value "{val}" for int param "n"'))
assert ex.match(f'Invalid value "{val}" for int param "n"')
Этот тест не пройден:
Falsifying example: test_validate_int_float(val=1e+16)
Оператор print выглядит следующим образом:
IT'S FLOAT!
Invalid value "1e+16" for int param "n"|Invalid value "1e+16" for int param "n"|False
Почему мое утверждение не соответствует? Строки выглядят одинаково для меня. Я предполагаю, что это из-за значения с плавающей запятой, но в таком случае, как мне правильно сопоставить значение?