Подтвердить что ты не робот

Как указать один тест в файле с nosetests?

У меня есть файл test_web.py, содержащий класс TestWeb, и многие методы называются test_something().

Я могу запускать каждый тест в классе следующим образом:

$ nosetests test_web.py 
...
======================================================================
FAIL: checkout test
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/Users/me/path/here/test_web.py", line 187, in test_checkout
...

Но я, похоже, не выполняю индивидуальные тесты. Они дают мне ошибки "Нет таких тестов" при запуске в том же PWD:

$ nosetests test_web.py:test_checkout
$ nosetests TestWeb:test_checkout

Что здесь может быть неправильным?

4b9b3361

Ответ 1

Вы должны указать его так: nosetests <file>:<Test_Case>.<test_method> или

nosetests test_web.py:TestWeb.test_checkout

Смотрите документы

Ответ 2

Вы также можете указать модуль:

nosetests tests.test_integration:IntegrationTests.test_user_search_returns_users

Ответ 3

Указание имен в командной строке, как и другие ответы, говорит, что это полезно и полезно. Однако, когда я нахожусь в процессе написания тестов, я часто обнаруживаю, что хочу запустить только те тесты, над которыми я работаю, и имена, которые мне придется писать в командной строке, становятся довольно длинными и громоздкими для записи, В этом случае я предпочитаю использовать пользовательский декоратор и флаг.

Я определяю wipd ( "work in progress decorator" ) следующим образом:

from nose.plugins.attrib import attr
def wipd(f):
    return attr('wip')(f)

Это определяет декоратор @wipd, который будет устанавливать атрибут wip на объекты, которые он украшает. Например:

import unittest
class Test(unittest.TestCase):

    @wipd
    def test_something(self):
        pass

Затем -a wip можно использовать в командной строке, чтобы сузить выполнение теста до тех, что помечены @wipd.

Примечание по именам...

Я использую имя @wipd для декоратора, а не @wip, чтобы избежать такой проблемы:

import unittest
class Test(unittest.TestCase):

    from mymodule import wip    
    @wip
    def test_something(self):
        pass

    def test_something_else(self):
        pass

import сделает декоратор wip членом класса, и будут выбраны теги all в классе. Плагин attrib проверяет родительский класс тестового метода, чтобы увидеть, существует ли там также выбранный атрибут, а атрибуты, созданные и протестированные с помощью attrib, не существуют в изолированном пространстве. Поэтому, если вы протестируете с помощью -a foo и ваш класс содержит foo = "platypus", тогда все тесты в классе будут выбраны плагином.

Ответ 4

Чтобы запустить несколько конкретных тестов, вы можете просто добавить их в командную строку, разделенные пробелом.

nosetests test_web.py:TestWeb.test_checkout test_web.py:TestWeb.test_another_checkout