Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 自定义django管理命令模块句柄方法中的单元测试函数_Python_Django_Unit Testing - Fatal编程技术网

Python 自定义django管理命令模块句柄方法中的单元测试函数

Python 自定义django管理命令模块句柄方法中的单元测试函数,python,django,unit-testing,Python,Django,Unit Testing,我正在使用一个自定义管理命令来运行+500行代码,该代码包含多个函数定义(并执行数据库查询) 管理/commands/talk.py from django.core.management.base import BaseCommand class Command(BaseCommand): def handle(self): def hello(): print "Hello!" def my_god():

我正在使用一个自定义管理命令来运行+500行代码,该代码包含多个函数定义(并执行数据库查询)

管理/commands/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()
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方法中的函数(例如,通过执行
命令().handle.hello()
)来进行单元测试,还是我缺少一种方法

我的解决方案是将所有代码放在
management/handle\u command.py
中的
handle
方法下,然后导入该代码并在
management/commands/talk.py
中的
handle
下运行
main
。然后我可以从
management/handle\u command.py
对函数进行单元测试

建议的管理/commands/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()
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
方法中的测试功能?

第一部分:

管理/commands/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()
第二部分:


如果您想在其他地方使用这些方法/将它们添加到
unittest
,显然最好不要将这些方法绑定到
命令
类。如果您只在
命令
类中使用它们(测试除外),那么您建议的测试方法似乎是最明智的

听起来是个不错的开始,一旦你有了单元测试,那么你也应该能够明智地重构它。K,我只是觉得奇怪,我没有在其他地方遇到我在这里提出的实践。很难相信我是唯一一个需要对包含多个功能的长管理命令模块进行单元测试的人。顺便说一句,谢谢你回答我的两个问题。