Как я могу это сделать, чтобы модульные тесты в Python (используя unittest
) выполнялись в том порядке, в котором они указаны в файле?
Изменение порядка модульных тестов в Python
Ответ 1
Вы можете изменить поведение сортировки по умолчанию, установив пользовательскую функцию сравнения. В unittest.py вы можете найти переменную класса unittest.TestLoader.sortTestMethodsUsing
, которая по умолчанию установлена на встроенную функцию cmp
.
Например, вы можете вернуть порядок выполнения своих тестов, выполнив следующие действия:
import unittest
unittest.TestLoader.sortTestMethodsUsing = lambda _, x, y: cmp(y, x)
Ответ 2
Умное именование.
class Test01_Run_Me_First( unittest.TestCase ):
def test010_do_this( self ):
assertTrue( True )
def test020_do_that( self ):
etc.
Один из способов принудительного выполнения определенного порядка.
Ответ 3
Как сказано выше, обычно тесты в тестовых случаях должны тестироваться в любом (то есть случайном) порядке.
Однако, если вы хотите заказать тесты в тестовом примере, по-видимому, это не тривиально.
Тесты (имена методов) извлекаются из тестовых примеров с помощью dir(MyTest)
, который возвращает отсортированный список участников. Вы можете использовать умные (?) Взломы, чтобы упорядочить методы по их номерам строк. Это будет работать для одного тестового примера:
if __name__ == "__main__":
loader = unittest.TestLoader()
ln = lambda f: getattr(MyTestCase, f).im_func.func_code.co_firstlineno
lncmp = lambda a, b: cmp(ln(a), ln(b))
loader.sortTestMethodsUsing = lncmp
unittest.main(testLoader=loader, verbosity=2)
Ответ 4
Есть также тестовые ролики, которые делают это сами - я думаю, py.test делает это.
Ответ 5
Использовать proboscis библиотеку, как я уже упоминал (см. краткую описание там).
Ответ 6
Я нашел решение для него с помощью плагина заказа PyTest, предоставленного здесь.
Попробуйте py.test YourModuleName.py -vv
в CLI, и тест будет работать в том порядке, в котором они появились в вашем модуле.
Я сделал то же самое и отлично работал у меня.
Примечание. Вам необходимо установить пакет PyTest и импортировать его.