Jak określić pojedynczy test w pliku z testami nosowymi?

102

Mam plik o nazwie test_web.py zawierający klasę TestWeb i wiele metod o nazwie test_something ().

Mogę przeprowadzić każdy test w klasie w następujący sposób:

$ 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
...

Ale wydaje mi się, że nie mogę przeprowadzać indywidualnych testów. Wyświetlają mi się błędy „Nie ma takiego testu”, gdy są uruchamiane z tym samym PWD:

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

Co tu może być nie tak?

opstastic
źródło
nie mogę ci pomóc, chyba że możesz opublikować swoje przypadki testowe lub SSCCE , właśnie wypróbowałem składnię, której używałeś z nosem na mojej maszynie i działała dobrze.
Jeff Tratner,

Odpowiedzi:

148

Musisz to określić w ten sposób: nosetests <file>:<Test_Case>.<test_method>lub

nosetests test_web.py:TestWeb.test_checkout

Zobacz dokumentację

Będzie
źródło
6
Dlaczego u licha biblioteka używa „:” zamiast „.”? ;)
omikron
2
Może po to, aby ułatwić rozgraniczenie między modułem a klasą?
Chris,
@omikron kiedy wskazałem plik, nie miałem żadnych błędów importu
gabeio
2
Wow, to okropne, klasyczne biblioteki Pythona, nie dbam o istniejące interfejsy
Dagrooms
16

Możesz również określić moduł:

nosetests tests.test_integration:IntegrationTests.test_user_search_returns_users
michaeljoseph
źródło
1
Nie wiem, czy to inna wersja Pythona, nosetestsczy co, ale ta składnia zawodzi. To, co działa, to nosetests tests/test_integration:IntegrationTests.test_user_search_returns_users/.
:,
1
@dwanderson oba zastosowania powinny działać, zgodnie z nose.readthedocs.io/en/latest/usage.html#selecting-tests . Twoja awaria może być spowodowana tym, że testsnie jesteś modułem w konfiguracji?
michaeljoseph
1
Ach, zgadza się, zapomniałem __init__.pyw testskatalogu. Dobra robota! Dzięki
dwanderson
11

Podawanie nazw w wierszu poleceń, tak jak sugerują inne odpowiedzi, działa i jest przydatne. Jednak kiedy jestem w trakcie pisania testów, często stwierdzam, że chcę uruchomić tylko test, nad którym pracuję, a nazwy, które musiałbym pisać w wierszu poleceń, stają się dość długie i kłopotliwe w pisaniu . W takim przypadku wolę użyć niestandardowego dekoratora i flagi.

Definiuję wipd("dekorator w toku") w ten sposób:

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

Definiuje dekorator, @wipdktóry ustawi wipatrybut na obiektach, które zdobi. Na przykład:

import unittest
class Test(unittest.TestCase):

    @wipd
    def test_something(self):
        pass

Następnie -a wipmożna użyć w wierszu poleceń, aby zawęzić wykonanie testu do tych oznaczonych @wipd.

Uwaga dotycząca nazw ...

Używam nazwy @wipddla dekoratora, zamiast @wipuniknąć tego rodzaju problemu:

import unittest
class Test(unittest.TestCase):

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

    def test_something_else(self):
        pass

Dzięki importtemu wipdekorator stanie się członkiem klasy , a wszystkie testy w tej klasie zostaną wybrane. Te attribkontrole plugin klasa dominująca metody testowej, aby sprawdzić, czy wybrany atrybut istnieje tam i atrybuty, które są tworzone i testowane przez attribnie istnieją w wydzielonej przestrzeni. Więc jeśli testujesz z, -a fooa twoja klasa zawiera foo = "platypus", wszystkie testy w klasie zostaną wybrane przez wtyczkę.

Louis
źródło
3

Aby uruchomić wiele określonych testów, wystarczy dodać je do wiersza poleceń, oddzielając je spacjami.

nosetests test_web.py:TestWeb.test_checkout test_web.py:TestWeb.test_another_checkout
Skurpi
źródło
0

W moich testach określanie testów z nazwami modułów nie działa

Musisz określić rzeczywistą ścieżkę do .py:

nosetests /path/to/test/file.py:test_function

To z nose==1.3.7

Stephen
źródło
0

Moim wymaganiem było uruchomienie pojedynczego testu w pliku testowym, który znajdował się w innym katalogu systemu Windows - zostało to zrobione z wiersza polecenia anaconda w następujący sposób:

prowadzono testy z:

(base) C:\Users\ABC\Documents\work\

ale test_MyTestFile.py i methodsFile.py znajdowały się w:

 (base) C:\Users\ABC\Documents\work\daily\

uruchom pojedynczy test, dołączając ścieżkę w cudzysłowie w następujący sposób:

(base) C:\Users\ABC\Documents\work>nosetests "daily\\test_MyTestFile.py:MyTestClass.test_add_integers"

test_MyTestFile.py wyglądał tak:

import methodsFile
import unittest

class MyTestClass(unittest.TestCase):

    def test_add_integers(self):
        assert methodsFile.add(5, 3) == 8

    def test_add_integers_zero(self):
        assert methodsFile.add(3, 0) == 3

MethodFile.py wyglądała następująco:

def add(num1, num2):
        return num1 + num2
Grant Shannon
źródło