Есть ли директива doctest, чтобы игнорировать порядок элементов при сопоставлении ожидаемого и возвращаемого списков.
В настоящее время это не удается:
Expected:
['foo', 'bar']
Got:
['bar', 'foo']
Есть ли директива doctest, чтобы игнорировать порядок элементов при сопоставлении ожидаемого и возвращаемого списков.
В настоящее время это не удается:
Expected:
['foo', 'bar']
Got:
['bar', 'foo']
Doctest всегда соответствует строковому выводу. Если вы хотите игнорировать порядок элементов списка, рекомендуется использовать sorted
.
Последний пример из этой выдержки из doctest:
doctest серьезно относится к требованию точных совпадений в ожидаемом выводе. Если хотя бы один символ не совпадает, тест считается неудачным. Возможно, это несколько раз вас удивит, поскольку вы точно узнаете, что Python делает и что не гарантирует в отношении вывода. Например, при печати набора Python не гарантирует, что элемент будет напечатан в каком-либо определенном порядке, поэтому тест типа
>>> >>> foo() {"Hermione", "Harry"}
уязвим! Один обходной путь - сделать
>>> >>> foo() == {"Hermione", "Harry"} True
вместо. Другой - сделать
>>> >>> d = sorted(foo()) >>> d
['Гарри', 'Гермиона']
Проблема решена.
Оказывается, я печатал список, поэтому doctest пытался сопоставить строки вместо списков.
FTR, doctest действительно соответствует спискам, игнорируя порядок элементов.
set
вместоlist
? - person wjandrea   schedule 22.08.2019list
— это упорядоченная структура данных, поэтому ее игнорирование противоречит смыслу использования такой структуры данных с самого начала. Что такое тест? - person C.Nivs   schedule 22.08.2019