2009-09-21 14 views
47

Czy istnieje jakiś powód, dla którego Nose nie mógłby znaleźć testów w Ubuntu 9.04?Nos nie może znaleźć testów w ubuntu

Używam nos 0.11.1 z pytonem 2.5.4.
Mogę uruchomić testy tylko wtedy, gdy jawnie określę nazwę pliku. Jeśli nie podam nazwy pliku, po prostu mówi: 0 testów.

Ten sam projekt działa dobrze na moim komputerze Mac, więc jestem dość zaskoczony!

+0

Dokładnie jakie polecenie wprowadzasz, kiedy oczekujesz uruchomienia testów? –

+0

"nosetests - with-gae" lub tylko "nosetests". Próbowałem także "testów nosa", gdzie "testy" to nazwa mojego katalogu plików testowych. Wszystkie polecenia działają doskonale na komputerze Mac, nie skonfigurowano konfiguracji nosków na obu komputerach. Pracuję w Ubuntu, jeśli zaimportuję pliki testowe w katalogu __init__.py z katalogu testów i uruchomię "testy testów nosa". To jednak nie jest trwałe. –

+10

Spróbuj uruchomić 'nosetests' z kilkoma' -v''s ... '-vv' zwykle dał mi wystarczająco dużo informacji, aby rozwiązać moje problemy. –

Odpowiedz

6

Niektórzy co związane, jeśli używasz testy off katalogu tj

nosetests ... tests/ 

gdzie test to nazwa folderu z moimi testami i ma oddzielne funkcje testu Pythona w jednym z modułów .py ... Twoje funkcje muszą zaczynać się od "testu", aby testy nosa pozwoliły rozpoznać to jako test, który chcesz uruchomić.

na przykład:

def test_something(): 
    ... 

nosetests będzie uruchomić tę funkcję, gdy wykonywane w tym katalogu podczas

def somethin_to_test(): 
    ... 

nie.

54

Takie zachowanie jest prawie na pewno spowodowane tym, że twoje pliki nie są nazwane zgodnie z zachowaniem testu dopasowania nosa. Od the nose docs:

nos automatycznie zbiera testy z plików źródłowych Python, katalogów i paczek znajdujących się w jego katalogu roboczego (który domyślnie bieżącego katalogu roboczego). Każdy plik źródłowy, katalog lub pakiet Pythona pasujący do wyrażenia regularnego testMatch (domyślnie: (?:^| [B _.-]) [Tt] est) zostanie zebrany jako test (lub źródło do pobrania testów) .

Podkreślenie było moje.

kilka przykładowych nazw, które pasują do:

  • TestFoo.py
  • Foo-Test.py
  • Foo_Test.py
  • Foo.Test.py (zauważ, że ten będzie starał się import Foo i podniesie wyjątek, jeśli nie można)

Nazwa, która wygląda jak byłoby MATC h, ale w rzeczywistości nie:

  • FooTest.py

Jeśli po prostu zmienić nazwy plików powinno być dobrze iść.


Aktualizacja: Czytałaś this blog post? Nie mogłem powiedzieć ze szczegółów, które opublikowałeś, ale może twoje katalogi testowe nie zawierają plików __init__.py?

... upewnij się, że „testy” katalogi są rzeczywiście moduły (mają pustą __init__.py pliku).

+2

spróbuje, że ... chodzi o to, że te same pliki, które kupili na moim Macu ... nie używają tego samego matchera na wszystkich platformach? –

+0

Twoja zmienna środowiskowa NOSE_TESTMATCH może być ustawiona inaczej lub spójrz na nose/config.py. http://code.google.com/p/python-nose/wiki/FindingAndRunningTests –

+0

Testy działają, gdy importuję plik testowy do __init__.py i określam moduł do uruchomienia. Nie inaczej. Dokładnie ten sam katalog i polecenia działają dobrze na moim Macu, nawet bez wyraźnego określenia katalogu. Nadal nie jestem w stanie tego rozgryźć. –

95

Drugą rzeczą, która zawsze dostaje mi nose jest to, że nie będzie uruchomić testy w plikach wykonywalnych. Nie jestem do końca pewien, dlaczego miałoby to wpływ na Mac/Ubuntu, ale warto spróbować.

Upewnij się, że skrypty nie dostały w jakiś sposób chmod +x "d na komputerze Mac ... A jeśli tak, napraw je za pomocą chmod -x $(find tests/ -name '*.py').

+1

Nadal nie działa ... a problem dotyczy ubuntu, a nie mac. –

+1

Nos domyślnie nie szuka testów w modułach wykonywalnych tylko na platformie Windows ... na mac/ubuntu musiałby użyć przełącznika --noexe aby to się stało – atlantis

+0

pracował dla mnie na windows –

16

Mogę potwierdzić, że jak @ david-wolever powiedział, one nie może być być wykonywalna na Ubuntu. Run

nosetests -vv --collect-only 

aby zobaczyć szczegóły na które zostały zbadane plików.

36

Miałem ten sam problem. Moje testy przebiegły dobrze w systemie Windows, ale nie w Ubuntu.

W Ubuntu, jeśli uruchomić:

nosetests -vv --collect-only 

prawdopodobnie zobaczysz, że to pomijanie plik testowy, ponieważ jest to plik wykonywalny: _Tools/LintControlFiles/test_HgLint.py jest wykonywalny; pomijane

W celu uzyskania nos rozważyć wykonywalne, uruchom go tak:

nosetests --exe 
1

Po przeglądając źródła nosa, a konkretnie plik selector.py, jeśli spojrzeć na to, co się dzieje,

https://github.com/nose-devs/nose/blob/master/nose/selector.py#L129

Podczas sprawdzania gdybyśmy wantFile, self.matches nazywa, który następnie robi regex wyszukaj pod numerem match, co można było przekazać jako testMatch.

Problem pojawia się, gdy następnie sprawdzić później w dół (i całym tym pliku),

https://github.com/nose-devs/nose/blob/master/nose/selector.py#L152

Działa bardzo sam rodzaj kontroli znowu przed wantFunction.

Oznacza to, że jeśli masz inną strukturę pakietu, pifile kontenera i rzeczywistą klasę/funkcję testu, będziesz musiał stworzyć szalone, skomplikowane wyrażenie regularne pasujące do tego na każdym etapie.

Dla mnie, gdy się tego nauczyłem, wybrałem przedrostek funkcji pakietu, kontenera i testu za pomocą wspólnego bitu, tj.

setests ├── __init__.py ├── setest_area1.py └──── def setest_someblock(): ...

A potem moja komenda nose działa podobnie,

nose --testMatch="setest"

ten następnie filtruje sposób oczekiwać, iż do pracy.

0

Użyj -all-modules, aby znaleźć wszystkie testy.

nosetests --all-modules ./tests