1. ホーム
  2. django

[解決済み] [Solved] カスタムDjango manage.pyコマンドをテストドライバから直接呼び出すにはどうしたらいいですか?

2022-04-13 19:26:46

質問

データベースのテーブルに対してバックエンドの操作を行う Django manage.py コマンドのユニットテストを書きたいと思います。 コードから直接管理コマンドを呼び出すにはどうしたらよいでしょうか?

manage.py test で設定したテスト環境(テストデータベース、テストダミーメールアウトボックスなど)が使えないので、tests.py からオペレーティングシステムのシェル上でコマンドを実行したくありません。

解決方法は?

このようなものをテストする最良の方法は、コマンド自体から必要な機能をスタンドアロン関数またはクラスへ抽出することです。これは、コマンドの実行に関するものから抽象化し、追加の要件なしにテストを書くのに役立ちます。

しかし、何らかの理由でロジックをコマンドから切り離すことができない場合、どのようなコードからでも コールコマンド というメソッドがあります。

from django.core.management import call_command

call_command('my_command', 'foo', bar='baz')