#python #doctest
#python #doctest
Вопрос:
Я нахожусь на стадии обучения использованию Python в качестве инструмента для контроля качества программного обеспечения.
Я написал следующий простой тест, чтобы найти букву «a» в матрице номеров текстового файла. проблема в том, что тест завершается неудачей, хотя ожидаемое значение равно тому, что я получил.
Почему это? Можете ли вы сказать мне, что я делаю не так?
тестовый скрипт:
fin = open("abc.txt", "r")
arr_fin = []
for line in fin:
arr_fin.append(line.split())
print arr_fin
for row in arr_fin:
arr_fin_1 = " ".join('{0:4}'.format(i or " ") for i in row)
print arr_fin_1
def find_letter(x, arr_fin_1):
"""
>>> find_letter('a', arr_fin_1)
97
"""
t=ord(x) #exchange to letter's ASCII value
for i in arr_fin_1:
if i==x:
print t
return;
def _test():
import doctest
doctest.testmod()
if __name__ == "__main__":
_test()
сообщение об ошибке:
Expected:
97
Got:
97
**********************************************************************
1 items had failures:
1 of 1 in __main__.find_letter
***Test Failed*** 1 failures.
Комментарии:
1. 1 за вопрос: ошибку такого рода очень легко допустить :-/
Ответ №1:
У вас есть дополнительный пробел после 97 — если вы удалите его, ваш тест должен пройти нормально.
Ответ №2:
Это:
return;
Возвращает вашу функцию None
.
Вы имели в виду return t
?
Кроме того, ИМХО doctest
тесты должны быть автономными. Это то, что пользователь должен увидеть в вашей документации и понять без контекста. В вашем примере вы используете модульно-локальный arr_fin_1
объект, который полностью непрозрачен для пользователя. Лучше определить его в doctest перед find_letter
вызовом, чтобы предоставить автономный пример.
Комментарии:
1. На самом деле в этом случае либо «print t», либо «return t», похоже, завершают проверку, если вы удалите пробел, упомянутый @Frank Schmitt. Наличие как «print t», так и «return t» приводит к сбою doctest, поскольку он получает 97 дважды .
2. Но я согласен, что это странное использование doctests (насколько я понимаю, вы должны думать о doctests как о документации, которую вы можете проверить, а не как о контроле качества вашего программного обеспечения). Они должны быть полностью автономными и не зависеть от внешнего контекста.