在自定义django-admin命令模块的handle方法内进行单元测试
我正在使用一个自定义的管理命令来运行一段超过500行的代码,这段代码包含多个函数定义,并且执行数据库查询。
管理命令文件:management/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()
我无法单独访问`handle`方法里的函数(比如通过 Command().handle.hello()
),这样我就不能对它们进行单元测试,难道我错过了什么方法吗?
我的解决办法是把所有代码放在 handle
方法下,然后把这些代码放到 management/handle_command.py
文件里。接着在 management/commands/talk.py
中导入这些代码并在 handle
方法下运行 main
。这样我就可以直接对 management/handle_command.py
中的函数进行单元测试了。
提议的管理命令文件示例:management/commands/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
方法里的函数测试呢?
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()
第二部分:
如果你想在其他地方使用这些方法,或者想把它们加到 unittest
里,最好不要把这些方法直接放在你的 Command
类里。如果你只是在 Command
类里使用它们(除了测试之外),那么你提到的测试方法看起来是最合理的。