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

komut myscript sınamanın en iyi yolu nedir? SO araştırma itibarenTest piton paketi bin komut en iyi uygulama

, ben buldum tek cevap sonuçları test sonra test_myscript denilen testlerde bir test yazmak ve komut dosyasını çalıştırmak için benim test durumda

import subprocess 

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

gibi bir şey kullanmak ve etmektir görünüyor . Daha iyi bir yolu var mı? Ya da farklı yollar için başka öneriler? Ve test paketini bin/testlere veya mypackage/testlere koymalı mıyım?

+0

Komut dosyalarından gelen projeler bunları test ediyor mu? – dm03514

+1

Komut dosyasının oluşturduğu proje değilse, komut dosyasını sınamanız gerekir? – vovel

cevap

1

tests'un nereye yerleştirileceğine dair "en iyi uygulamalar" olduğuna inanmıyorum. Birçok farklı görüşler vardır Bakın nasıl: Where do the Python unit tests go?

Ben şahsen bin ve mypackage dizinleri yakın bir ve üst düzeyde sadece tests dizini olurdu - örneğin django olduğu gibi. (Eğer söz ettik olarak)

  • alt işlemi ancak check_output kullanarak: sonuçlarını sizin bin komut dosyası çalıştıran ve alma için

    kullanabileceğiniz

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

    • , test command-line scripts için tasarlanmıştır - görünüm Bir iş
    • için aracı gibi s de bu article
  • cli görmek ve o cli.test modül var olur

Umut (hiç şahsen kullanmadım).

+0

Komut dosyası çıktı üretmez ve bunun yerine bir veritabanını değiştirirse ne olur? Normalde, veritabanını setUp'da oluşturulan bir test veritabanına değiştirmek için bağımlılık enjeksiyonunu kullanırım. Komut dosyasını içe aktarmak için göreceli içe aktarma kullanabileceğim bir yol var mı, bağımlılık enjeksiyonumu yaptıktan sonra ana (args) çalıştırılsın mı? Çıktının test edilmesi, test veritabanında çalıştığı varsayımıyla kolay bir kısımdır. İdeal olarak, bağımlılık enjeksiyonunu kullanmaya devam etmek istiyorum. – vovel