Порядок, в котором функции вызываются doctest? - PullRequest
3 голосов
/ 14 января 2020

Я совершенно сбит с толку, почему doctest.testmod() вызывает тестовые функции в странном порядке

from doctest import testmod

def test_forwrite():
    '''
    >>> test_forwrite()
    OP: Done
    '''
    write()

def test_forread():
    '''
    >>> test_forread()
    OP: Done
    '''
    read()

if __name__ == "__main__":
    testmod(verbose = True)

Почему, независимо от порядка, в котором его определенный test_forread() проверяется первым, всегда.

Ответы [ 2 ]

2 голосов
/ 14 января 2020

Тесты отсортированы по имени. test_forread сортирует до test_forwrite() в алфавитном порядке.

Исходный код doctest для метода DocTestFinder.find() :

# Sort the tests by alpha order of names, for consistency in
# verbose-mode output.  This was a feature of doctest in Pythons
# <= 2.3 that got lost by accident in 2.4.  It was repaired in
# 2.4.4 and 2.5.
tests.sort()

doctest.testmod() использует DocTestFinder().find() для поиска тестов в вашем модуле.

Однако ваши тесты никогда не должны полагаться на любой при заданном порядке. Пишите ваши тесты, чтобы они были независимыми, чтобы вы могли выполнять тесты по отдельности или параллельно.

2 голосов
/ 14 января 2020

Это потому, что функция testmod проверяет функции в данном модуле / программе, вызывая их в в алфавитном порядке (отсортировано).

В вашем случае test_forread() будет вызвано первым, потому что сначала сортируется в test_forwrite() при сортировке в алфавитном порядке.

...