Zdefiniowałem klasę wyjątków SpamException
w module spam
. Teraz chcę przetestować funkcję spam_function
, która podnosi ten wyjątek. Napisałem więc poniższy dokument.Jak testować wyjątki za pomocą doctest w Pythonie 2.x i 3.x?
>>> spam_function()
Traceback (most recent call last):
....
SpamException
Test powiedzie się na Pythonie 2.x, ale na Pythonie 3.x test się nie powiedzie. Poniższy test działa na Pythonie 3.x.
>>> spam_function()
Traceback (most recent call last):
....
spam.SpamException
Znaczącą różnicą jest tutaj włączenie nazwy modułu do nazwy wyjątku. Więc jak mogę napisać test, który działa zarówno w Pythonie 2.x, jak i 3.x?
I podczas dodawania '# doctest nie zauważył żadnej zmiany: + IGNORE_EXCEPTION_DETAIL', czyli utrzymuje braku albo z Wersja Pythona. Czy możesz dodać pełny przykład? –
'IGNORE_EXCEPTION_DETAIL' działa tak szybko, jak klasa zapytania ma metodę' __str__', która zwraca niepusty ciąg. Wtedy i tylko wtedy końcowa linia wyjątków ma dwukropek, który jest wymagany, aby dyrektywa działała. –
Wygląda na to, że IGNORE_EXCEPTION_DETAIL ignoruje również komunikat wyjątku, który usuwa wielką część celu doctestowania tych zachowań. Ale typ wyjątku jest nadal sprawdzany. ouf! – vaab