2017-10-04 3 views
0

私はユニットテストを実行するためにDjangoテストランナーを使用しています。これらのテストの中には、ローカルシステム上にTONS個のファイルを作成するファクトリを使用するものがあります。彼らはすべて検出可能な名前を持ち、簡単に削除することができます。私はそれが我々がテストしていることを検出した場合 テストランナーの最後にDjango/unittest runコマンド

  • ファイルを削除するには、私のカスタムイメージモデルのコードを変更して実行しているファイルを削除するcronジョブを保ついずれか

    1. することを避けるためにしようとしている

      。代わりに、私はテストが生成したすべてのファイルをクリーンアップするために、テスト実行の最後に一度だけ(一度だけ)コマンドを実行したいと思います。

    私は、目的の規則に一致するファイルを削除する小さな管理コマンドを書きました。テストランナーにtearDownまたは特定のテストのtearDownClassメソッドだけでなく、テストスイート全体の完了時にcall_commandを実行させる方法がありますか?

  • 答えて

    0

    TEST_RUNNER = 'myapp.test_runner.MyTestRunner' 
    

    は、次にテストランナーでは、我々は「teardown_test_environment」メソッド内から画像を削除します既存のジュノテストランナーから継承したテストランナーの

    import os                     
    import shutil 
    
    from django.conf import settings 
    from junorunner.testrunner import TestSuiteRunner 
    
    
    class MyTestRunner(TestSuiteRunner): 
    
        def teardown_test_environment(self, *args, **kwargs): 
         # Remove test-created media files 
         if all([ 
          os.path.isdir(settings.MEDIA_ROOT), 
          'test' in settings.MEDIA_ROOT, 
         ]): 
          shutil.rmtree(settings.MEDIA_ROOT) 
         super(MyTestRunner, self).teardown_test_environment(*args, **kwargs) 
    

    このメソッドは、一度だけの試験方法のティアダウンを呼び、それが最後に一回呼び出されることを保証するためには良い場所のようだ、とされます。

    0

    models.pyと同じフォルダにservices.pyファイルを作成する場合は、そこにクリーンアップコードを入れてから、管理コマンドとtest tearDownからDRYを保ったまま呼び出すことができます。

    0

    あなたはおそらくDjangoのテストランナーがテストを発注する方法を悪用する可能性があります(https://docs.djangoproject.com/en/1.11/topics/testing/overview/#order-in-which-tests-are-executedを参照)

    テストケースはDjangoのTestCaseクラスから継承している場合は、あなたがたunittest.TestCaseから直接継承するダミークリーンアップのテストケースを作成することができます。テストランナーが最後にそれを実行し、そこであなたのクリーンアップを行うことができます。

    しかし、これはdjango開発者がテスト注文を変更することに決断を下した場合には壊れてしまいます。それでは、私たちがやってしまったことはsettings.pyに次の行を追加することで、カスタムのテストランナーを作成していた

    関連する問題