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

スクリプトmyscriptをテストする最良の方法は何ですか?pythonパッケージbinスクリプトのベストプラクティスをテストする

SO研究から、私が見つけた唯一の答えはtest_myscriptと呼ばれるテストにテストを書き、スクリプトを実行し、その結果をテストするために私のテストケースに

import subprocess 

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

のようなものを使用することであると思われます。より良い方法がありますか?または、別の方法のための他の提案?テストスイートをbin/testsまたはmypackage/testに置く必要がありますか?

+0

スクリプトが作成したプロジェクトはそれらをテストする必要がありますか? – dm03514

+1

スクリプトの元のプロジェクトでなければ、スクリプトをテストする必要がありますか? – vovel

答えて

1

testsをどこに置くかについての「ベストプラクティス」はありません。ありますどのように多くの異なる意見を参照してください:Where do the Python unit tests go?

私は個人的にあなたのbinmypackageディレクトリの近くに、1トップレベルでのみtestsディレクトリを持っていると思います - 例えば、として、djangoがあります。

  • サブプロセス(あなたが言及してきたように)が、check_outputを使用して:あなたのbinスクリプトを実行し、使用可能な結果を​​得るための

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

    • test command-line scriptsにデザインされました
    • 仕事のためのツールのようなのも、このarticle
  • cliを参照してください、それが役立ちますcli.testモジュール(これまで個人的に使用していない)

希望です。

+0

スクリプトが出力を生成せず、代わりにデータベースを変更する場合、何ですか?通常、依存関係注入を使用して、データベースをsetUpで作成されたテストデータベースに変更します。相対インポートを使用してスクリプトをインポートし、依存関係注入を実行してmain(args)を実行できる方法はありますか?出力のテストは、テストデータベースで動作することを前提とした簡単な部分です。理想的には、私は依存性注入を使い続けたいと思います。 – vovel

関連する問題