2011-12-01 13 views
22

Poszukuję optymalnej konwencji nazewnictwa dla plików testowych Pythona, które ułatwiają korzystanie z różnych frameworków testowych (unittest, note, pyunit, ...), a także jest przyjazna z automatycznym wykrywaniem testów dla tych narzędzi.Jaka jest optymalna konwencja nazewnictwa dla plików testowych w Pythonie?

Potrzebuję tylko klarownego zestawu zaleceń, który wymagałby minimalnej konfiguracji narzędzi.

  • Nazwa katalogu testów? test lub tests?
  • Gdzie umieścić testy? w module/testdir lub module /../ testdir
  • Testować nazwy plików za pomocą podkreślenia lub kreski? test_0.py lub test-0.py

wiem, mam zbyt dużo czasu :)

+3

The "-" stwarza problemy w Pythonie, ponieważ narusza reguły mapujące nazwy plików na nazwy modułów. ** Nigdy ** nie używaj niczego innego niż poprawny identyfikator Pythona jako część nazwy pliku Pythona. –

Odpowiedz

12

Nie nazywaj katalog test czy będzie to kolidować z wbudowaną test opakowaniu.

Konwencje nazewnictwa są zdefiniowane w PEP 8. Zobacz sekcję "Konwencje nazewnictwa". Podkreślenia są lepsze niż łączniki!

Układ Twojej paczki jest nieco bardziej elastyczny. Mam tendencję do wykonywania następujących czynności:

package 
|-- package 
| |-- __init__.py 
| `-- <etc> 
|-- tests 
| `-- <etc> 
|-- setup.py 
|-- README 
|-- LICENCE 
`-- <etc> 

Dzięki temu testy są oddzielone od samego pakietu. Instalując pakiet za pomocą setup.py można zainstalować tylko źródło, które utrzymuje porządek wśród tłumaczy. Testy są dostępne dla programistów, którzy potrzebują ich, gdy otrzymają źródło pakietu.

Powinieneś spojrzeć na The Hitch Hiker's Guide to Packaging, aby uzyskać więcej informacji na temat pakietów Python.

+2

Dzięki! Tylko jedno pod-pytanie: co jeśli mam kilka submodułów, oznacza to, że będę musiał połączyć wszystkie testy w tym samym katalogu? Czy powinienem przenieść je tylko do podkatalogów takich jak '/ tests/a /'? – bogdan

+1

Możesz uczciwie iść tą drogą. Django stosuje podejście, o którym wspomniałem i myślę, że wielu z nich umieszcza je w jednym miejscu. Aplikacje Django mają jednak rozłożone testy i jestem pewien, że wiele osób robi to w ten sposób.Chciałbym skłaniać się ku testom w jednym miejscu nad rozproszonymi po całym (czy to w źródle lub poza nim), ale nie mogę wymyślić silnego argumentu, który dałby wam tak czy inaczej :) – adamnfish

+3

Argumentem za utrzymaniem testów w oddzielnym katalogu jest całkowicie zależne od estetyki. Zgadzam się z @adamnfish na umieszczanie ich osobno w strukturze katalogów, która odzwierciedla kod - w ten sposób łatwiej jest znaleźć określone testy do uruchomienia (tak jak robię to cały czas podczas tworzenia). Ale jeśli masz skłonność do zmiany struktury projektu (dodawania i usuwania modułów/plików), możesz przegapić aktualizację testów - ale zobaczysz awarie, więc będziesz wiedział! –

1

To zależy od narzędzia, którego używasz do przeprowadzania testów.

Jeśli używasz nosetest filozofia stosowana do wykrywania testu jest dość prosta:

If it looks like a test, it’s a test.

Jeśli używasz py.test konwencje są pretty open too.

O „gdzie umieścić testu” pytaniu PERSONNALY, wolę przechowywać testy w podkatalogu w każdym opakowaniu, aby upewnić się, aby nie zapomniał uruchomić/dotykać testy kiedy ktoś edycji kodu;)

Powiązane problemy