Pytest / Гипотеза не соответствует строке, как ожидалось - PullRequest
1 голос
/ 15 октября 2019

Я тестирую функцию проверки, которую я использую с 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

Почему мое утверждение не соответствует? Строки выглядят одинаково для меня. Я предполагаю, что это из-за значения с плавающей запятой, но в таком случае, как мне правильно сопоставить значение?

Ответы [ 2 ]

1 голос
/ 15 октября 2019

Преобразовать ex.value в str перед проверкой равенства с помощью:

print("{}|{}|{}".format(ex.value, f'Invalid value "{val}" for int param "n"',
                        str(ex.value) == f'Invalid value "{val}" for int param "n"'))
0 голосов
/ 16 октября 2019

Какая версия pytest и Python? Я почти уверен, что это проблема использования pytest, не связанная с гипотезой.

Хотя это и не ответ, используется аргумент match до pytest.raises вместо методао вещах, которые он возвращает, часто легче читать, и я подозреваю, что не будет той же самой проблемы.

...