модульное тестирование объектов Python с помощью pytest - PullRequest
2 голосов
/ 29 апреля 2011

У меня есть метод, который возвращает список объектов, которые соответствуют определенным критериям

result = find_objects(some_criteria)
print("%r" % result)

>> [<my_object.my_object object at 0x85abbcc>]

Я хотел бы написать pytest для проверки операции find_objects ()

def test_finder(testbed):
    result = testbed.find_objects(some_criteria)

    assert result is [<my_object.my_object object at 0x85abbcc>]

Пока что pytest указывает на левую угловую скобку (<) и объявляет «SyntaxError» </p>

Я думаю, что даже если я получу это на работу, в будущем произойдет сбой, когда 'my_object'хранится в другом месте.Если у меня есть несколько экземпляров, как я могу подтвердить, что было зарегистрировано правильное количество экземпляров?

В этом контексте, как питонный способ проверить выходные данные метода, который возвращает объекты?

js

Ответы [ 3 ]

3 голосов
/ 29 апреля 2011

Как вы уже догадались, проблема в том, чтобы попытаться сравнить «есть». «is» означает «точно такой же объект», и даже два объекта, которые кажутся идентичными, могут не пройти этот тест.

Вот некоторые вещи, которые вы можете проверить

  • Исключений не было
  • Возвращенный объект был правильного типа

    assert isinstance(object, ResultClass)

  • Возвращенный объект имеет некоторые специфические атрибуты

    assert result.attribute == attribute

Такого рода вещи. Я не думаю, что есть «принятый» способ проверки, только несколько вещей, которые вы можете захотеть проверить, и вам решать, что именно вы хотите проверить. Использование «is» - плохая идея, а сравнение с расположением в памяти - плохая идея.

2 голосов
/ 29 апреля 2011

Строка

assert result is [<my_object.my_object object at 0x85abbcc>]

фактически является синтаксической ошибкой в ​​Python:)

Если вы хотите проверить тип и длину, вы можете сделать что-то вроде:

assert len(result) == 1
for x in result:
    assert isinstance(result, my_object.my_object)
2 голосов
/ 29 апреля 2011

Вы можете попробовать:

assert isinstance(result, my_object.my_object)

Вы также можете попробовать сравнить строковое представление (что, по сути, то, что вы делаете, за исключением пропущенных кавычек).также хотите взглянуть на repr docs , чтобы получить представление о том, что происходит в вашем операторе печати.Угловые скобки означают, что это не замена плагина для объекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...