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

Qual è il modo migliore per testare lo script myscript?Test degli script bin del pacchetto python best practice

da così la ricerca, sembra che l'unica risposta che ho trovato è quello di scrivere un test in test chiamato test_myscript e usare qualcosa come

import subprocess 

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

nel mio banco di prova per eseguire lo script e quindi verificare i risultati . C'è un modo migliore? O altri suggerimenti per modi diversi? E dovrei mettere la suite di test in bin/test o in mypackage/test?

+0

I progetti degli script potrebbero provarli? – dm03514

+1

Se non il progetto da cui proviene lo script, allora cosa dovrebbe testare lo script? – vovel

risposta

1

Non credo ci siano delle "migliori pratiche" su dove mettere tests. Guarda come molte opinioni diverse ci sono: Where do the Python unit tests go?

io personalmente avere uno ed un solo tests directory sul livello superiore, vicino alle tue bin e mypackage directory - come, per esempio, ha django.

Per l'esecuzione dello script bin e ottenere risultati è possibile utilizzare:

  • sottoprocesso (come hai detto), ma utilizzando check_output:

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

    • è stato progettato per test command-line scripts - guarda s come lo strumento per un lavoro
    • anche vedere questo article
  • cli ed è cli.test modulo (non hanno mai usato personalmente)

Speranza che aiuta.

+0

Se lo script non produce output e modifica invece un database, allora cosa? Normalmente, utilizzo l'injection dependency per modificare il database in un database di test creato in setUp. Esiste un modo per utilizzare le importazioni relative per importare lo script, quindi eseguire l'iniezione delle dipendenze e quindi eseguire main (args)? Testare l'output è la parte facile presumendo che funzioni sul database di test. Idealmente, mi piacerebbe continuare a usare l'iniezione di dipendenza. – vovel

Problemi correlati