我正在为我的所有单元测试嘲笑我的RpcClient
课程:
import unittest2
from mock import patch
@patch('listeners.RpcClient')
class SomeTestCase(unittest2.TestCase):
test_something(self, mock_api):
...
test_something_else(self, mock_api):
...
对于我的大多数测试,我不想使用模拟对象做任何断言,我想做的就是修补类,以便RpcClient
不会尝试连接和触发对我的每个测试的请求(我把它连接到我的一个模型上的保存后事件)。
我可以避免将mock_api
传入我的每一项测试吗?
答案 0 :(得分:2)
我最后使用setUp
patcher.start()
进行模拟
def setUp(self):
self.rpc_patcher = patch('listeners.RpcClient')
self.MockClass = rpc_patcher.start()
def tearDown(self):
self.rpc_patcher.stop()
因此,我不必修饰任何测试用例,也不必在测试中添加任何额外的参数。
更多信息:
http://docs.python.org/dev/library/unittest.mock#patch-methods-start-and-stop
答案 1 :(得分:0)
你能设置一个默认参数mock_api吗?
def test_something(self, mock_api=None):
...
def test_something_else(self, mock_api=None):
答案 2 :(得分:0)
您可以在调用SUT时使用mock.patch
作为上下文管理器。类似的东西:
import unittest2
from mock import patch
class SomeTestCase(unittest2.TestCase):
def call_sut(self, *args, **kwargs):
with mock.patch('listeners.RpcClient'):
# call SUT
def test_something(self):
self.call_sut()
# make assertions
def test_something_else(self):
self.call_sut()
# make assertions