2013-09-13 4 views
4

В моем тестовом коде мой doctest не работает, но сценарий завершается с нулевым значением возврата, что приводит к прохождению CI-прогона, который не предназначен.Doctest не удалось с нулевым кодом выхода

Это правильное поведение модуля doctest?

Мой сценарий заканчивается:

if __name__ == '__main__': 
    import doctest 
    doctest.testmod() 

Выход как:

********************************************************************** 
File "test/test.py", line 7, in __main__ 
Failed example: 
    f(1,0) 
Expected: 
    ----- 
    type: <type 'exceptions.ZeroDivisionError'> 
    value: integer division or modulo by zero 
    x 
    ----- 
Got: 
    ----- 
    type: <type 'exceptions.ZeroDivisionError'> 
    value: integer division or modulo by zero 
    ----- 
********************************************************************** 
1 items had failures: 
    1 of 1 in __main__ 
***Test Failed*** 1 failures. 
[email protected]:~/programming/exception-notifier(fix-travis)(0)$ echo $? 
0 
+0

Можете ли вы отправить полный стек? – Paco

+0

отбрасывает X из вашей докшрин? –

+0

Это х намеренно добавлено, чтобы выполнить сбой теста. – fossilet

ответ

2

Я считаю, используя doctest.testmod(raise_on_error=True) вызовет исключение быть поднята, когда тест провален, который вызывает сценарий завершается с ненулевой код.

Python doc here:

Необязательный аргумент raise_on_error по умолчанию ложно. Если true, исключение возникает при первом сбое или неожиданном исключении в примере . Это позволяет отказоустойчивости откладываться. По умолчанию поведение - продолжить выполнение примеров.

3

@ Ответ на fossilet работает для правильного разбиения сборок, которые терпят неудачу, но он вызывает исключение, прежде чем doctest сможет что-либо записать на консоль. Это делает ваши журналы намного менее полезными для выявления проблемы.

Альтернативой является вызов

sys.exit(doctest.testmod()[0]) 

Это делает код завершения процесса, равное количеству тестов, которые не удалось. Ваш инструмент CI должен интерпретировать ненулевые коды выхода как сбои. Но выход доктрины все равно будет поступать на консоль.

 Смежные вопросы

  • Нет связанных вопросов^_^