【发布时间】:2020-01-10 11:13:18
【问题描述】:
我有一个 APITestCase 的测试子类,我使用类方法 setUpTestData 为我的测试和一些模拟创建数据。基本上我想做的是运行 mock.patch.stopall (如下所示),但它不起作用。
我的实现基于THIS ANSWER,我正在使用:Django v2.2.4 和 djangorestframework v3.10.2
import mock
from rest_framework.test import APITestCase
class FooTest(APITestCase):
@classmethod
def setUpTestData(cls):
patcher_one = mock.patch('route.one')
mock_route_one = patcher_one.start()
patcher_two = mock.patch('route.two')
mock_route_one = patcher_two.start()
cls.addCleanup(mock.patch.stopall)
# etc
super(FooTest, cls).setUpTestData()
使用此代码运行测试时,我得到:
TypeError: addCleanup() missing 1 required positional argument: 'function'
所以我将 addCleanup 调用编辑为:
cls.addCleanup(function=mock.patch.stopall)
但我得到以下信息:
TypeError: addCleanup() missing 1 required positional argument: 'self'
编辑到:
cls.addCleanup(cls, function=mock.patch.stopall)
我明白了
AttributeError: type object 'FooTest' has no attribute '_cleanups'
此时我有点迷茫。
我正在使用的解决方法是在 tearDownClass 方法中进行:
@classmethod
def tearDownClass(cls):
mock.patch.stopall()
但我想把所有的测试逻辑集中在 setUpTestData 方法中。
有人知道我在哪里搞砸了吗?
【问题讨论】:
标签: django unit-testing testing django-rest-framework mocking