1

カスタム管理コマンドを使用して、+500 行で複数の関数定義を含む (およびデータベース クエリを実行する) コードを実行しています。

管理/コマンド/talk.py

from django.core.management.base import BaseCommand

class Command(BaseCommand):
    def handle(self):
        def hello():
            print "Hello!"
        def my_god():
            print "OMG!"
        def main():
            hello()
            my_god()

Command().handle.hello()単体テストを行うために、handle メソッド内の関数に個別に (たとえば、 を実行して) アクセスできませんか、それとも実行する方法がありませんか?

handleこれに対する私の解決策は、メソッドの下にすべてのコードを配置し、management/handle_command.pyそのコードをインポートしてinmainの下handleで実行することですmanagement/commands/talk.py。次に、から関数を単体テストできますmanagement/handle_command.py

提案された管理/コマンド/talk.pyの例

import my_project.my_app.management.handle_command
from django.core.management.base import BaseCommand

class Command(BaseCommand):
    def handle(self):
        my_project.my_app.management.handle_command.main()

handleカスタム django-admin コマンド モジュールのメソッド内で関数をテストするにはどうすればよいですか?

4

1 に答える 1

2

最初の部分:

管理/コマンド/talk.py

を使用して、クラス自体に関数を定義する必要があります。self

class Command(BaseCommand):
    def hello(self):
        print "Hello!"
    def my_god(self):
        print "OMG!"

    def handle(self):
        # this was def main():
        self.hello()
        self.my_god()

第二部:

Commandこれらのメソッドを別の場所で使用したり、 に追加したりする場合は、これらのメソッドをクラスに固定しないことが明らかに望ましいですunittestCommandクラスでのみ(テスト以外で)使用している場合は、テスト用に提案された方法が最も賢明なようです。

于 2013-02-04T10:47:50.337 に答える