djd*_*s23 5 python django unit-testing mocking
我有一个要测试的命令。它击中了外部服务,我想模拟出击中这些外部服务的函数调用,只检查它们是否使用正确的参数被调用。代码如下所示:
import mock
from django.core.management import call_command
from myapp.models import User
class TestCommands(TestCase):
def test_mytest(self):
import package
users = User.objects.filter(can_user_service=True)
with mock.patch.object(package, 'module'):
call_command('djangocommand', my_option=True)
package.module.assert_called_once_with(users)
Run Code Online (Sandbox Code Playgroud)
但是,当我运行它时,我一直AssertionError: Expected to be called once. Called 0 times.认为这是因为我实际上并没有在上下文中调用该模块call_command('djangocommand', my_option=True),而是在. 如果没有,是否有人对如何进行此类测试有任何建议?
您需要修补的引用是 django.core.management 中的“module”属性引用。尝试模拟测试文件中的包引用不会更改 django.core.management 中的引用。
你需要做类似的事情
import mock
from django.core.management import call_command
import django.core.management
from myapp.models import User
class TestCommands(TestCase):
def test_mytest(self):
users = User.objects.filter(can_user_service=True)
with mock.patch.object(django.core.management, 'module'):
call_command('djangocommand', my_option=True)
django.core.management.module.assert_called_once_with(users)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2166 次 |
| 最近记录: |