2011-08-03 13 views
8

Właśnie skończyłem pisać rdzenną część projektu, nad którym pracuję i chcę napisać test na to używając unittest zanim przejdę dalej. Jestem świadomy, że powinienem był to zrobić wcześniej, ale kiedy zaczynałem, nie znałem Pythona, więc ... cokolwiek ..Jak importować moduł z katalogu nadrzędnego? (unittest purposes)

Co chciałbym osiągnąć: Mam podpakiet pakietu głównego, który zawiera wszystkie moduły, które chcę przetestować w środku. Chcę umieścić sububackage w tym, co nazywa się "testami" lub czymś, co zawiera wszystkie moje przypadki testowe, które chciałbym móc zebrać w zestawie testowym poza pakietem, więc w końcu mogę przeprowadzić cały test dla cały projekt za jednym razem.

struktura jest mniej więcej tak:

/projectPackage 
/projectPackage/package 
/projectPackage/package/\__init__.py (empty) 
/projectPackage/package/someModule.py 
/projectPackage/package/... (more modules) 
/projectPackage/package/testing.py (runs all the tests in /tests/) 
/projectPackage/package/tests 
/projectPackage/package/tests/\__init__.py (empty) 
/projectPackage/package/tests/someModuleTests.py 

Problem mam:

someModuleTests musi importować someModule z pakietu nadrzędnego więc może testować swoje metody. To chyba nie działa. Otrzymuję różne błędy, takie jak:

Attempted relative import beyond toplevel package 

W każdym razie, oczekuję, że to tylko dlatego, że jestem noob Python! Mam własne pomysły na to, jak mam to zrobić w tym projekcie, ponieważ oczywiście każdy jest inny, ale wszelkie ogólne porady dotyczące struktury średnich i dużych projektów Pythona są również mile widziane.

Odpowiedz

13

Uruchom test jednostki z katalogu nadrzędnego, aby katalog był w PYTHONPATH (aktualny katalog roboczy zawsze jest). Odbywa się to poprzez wykonanie pliku testowego z katalogu nadrzędnego lub za pomocą czegoś takiego jak test nosa, który rekurencyjnie wyszukuje wszystkie testy w pakiecie.

Nie używaj względnego importu, powodują takie rzeczy. Nie zhakuj swojej PYTHONPATH i/lub sys.path, aby spróbować to naprawić.

+0

Ok wielkie, dzięki. Chciałbym przegłosować, ale nie mam wystarczającej reputacji: S –

+0

Nie ma problemu, możesz wybrać moją przeszłość jako odpowiedź, jeśli wystarczająco ci się podoba :-) – ikanobori

1

Jeśli możesz wykonać swój kod, to Twoja PYTHONPATH powinna już być poprawnie ustawiona. Musisz określić moduł, który chcesz zaimportować, np.

import projectPackage.package.someModule 
1

Zważywszy, że używasz narzędzi wiersza polecenia, aby uruchomić swoje testy, można śledzić the docs i mieć coś jak następuje:

python -m unittest package.tests.someModuleTests 
Powiązane problemy