我正在使用自定义管理命令来运行+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()


我无法单独访问handle方法内部的功能(例如通过执行Command().handle.hello())以进行单元测试,还是我错过了一种方法?

我对此的解决方案是将所有代码放在handle中的management/handle_command.py方法下,然后仅导入该代码并在main中的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()


如何最好地处理自定义django-admin命令模块的handle方法中的测试功能?

最佳答案

第一部分:

管理/命令/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,显然最好不要将这些方法装订到您的unittest类中。如果只在Command类中使用它们(而不是测试),那么建议的测试方法似乎是最明智的。

关于python - 定制django-admin命令模块的handle方法中的单元测试功能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14684836/

10-12 23:32