2013-07-18 1 views
10
myproject/ 
    bin/ 
     myscript 
    mypackage/ 
     __init__.py 
     core.py 
     tests/ 
      __init__.py 
      test_mypackage.py 
    setup.py 

Jaki jest najlepszy sposób przetestowania skryptu myscript?Testowanie skryptów pakietów pakietów Pythona najlepsza praktyka

z tak badań, wydaje się jedynym rozwiązaniem znalazłem jest napisanie testu w testach zwanych test_myscript i użyć coś jak

import subprocess 

process = subprocess.Popen('myscript arg1 arg2') 
print process.communicate() 

w moim przypadku testowego, aby uruchomić skrypt, a następnie sprawdzić wyniki . Czy istnieje lepszy sposób? Lub inne sugestie na różne sposoby? I czy powinienem umieścić zestaw testowy w bin/testach lub w mypackage/testach?

+0

Czy projekty, z których pochodzą skrypty, testują je? – dm03514

+1

Jeśli nie projekt, z którego pochodzi skrypt, to co powinno przetestować skrypt? – vovel

Odpowiedz

1

Nie wierzę, że istnieją "najlepsze praktyki" dotyczące lokalizacji tests. Zobacz, jak wiele różnych opinii są tam: Where do the Python unit tests go?

bym osobiście mam jeden i tylko tests katalog na najwyższym poziomie, w pobliżu swoich bin i mypackage katalogów - jak, na przykład, django ma.

Do uruchomienia skryptu bin i uzyskanie wyników można użyć:

  • podproces (jak już wspomniano), ale przy użyciu check_output:

    import subprocess 
    output = subprocess.check_output("cat /etc/services", shell=True) 
    
  • scripttest module

    • został zaprojektowany do test command-line scripts - wygląd s jak narzędzie pracy
    • patrz również ten article
  • cli i to moduł cli.test (nie kiedykolwiek używane osobiście)

nadzieję, że pomoże.

+0

Jeśli skrypt nie generuje danych wyjściowych, a zamiast tego modyfikuje bazę danych, to co? Zwykle używam wtrysku zależności, aby zmienić bazę danych na testową bazę danych utworzoną w setUp. Czy istnieje sposób, w jaki mogę użyć importów względnych do zaimportowania skryptu, a następnie wykonać wtrysk zależności, a następnie uruchomić główny (args)? Testowanie danych wyjściowych jest łatwą częścią przy założeniu, że działa na testowej bazie danych. Najlepiej byłoby, gdyby nadal stosowałem wtrysk zależności. – vovel