您只需在被測模塊中修補A
global。我想在這裏使用的@patch
裝飾語法:
import mock
import unittest
import module_under_test
class TestOriginal(unitest.TestCase):
@patch('module_under_test.A')
def test_Original_method(self, mocked_A):
mocked_A.return_value = 42
result = module_under_test.B()
mocked_A.assert_called_with()
self.assertEqual(result, 420)
這通過在MagicMock
模擬對象爲A()
作爲一個額外的參數的測試方法。
請注意,我們在這裏明確命名模塊。你也可以使用patch.object()
,只是命名模塊上的屬性(這是你的模塊全局):
class TestOriginal(unitest.TestCase):
@patch.object(module_under_test, 'A')
def test_Original_method(self, mocked_A):
mocked_A.return_value = 42
result = module_under_test.B()
mocked_A.assert_called_with()
self.assertEqual(result, 420)
,您仍然可以使用with
聲明過,當然:
class TestOriginal(unitest.TestCase):
def test_Original_method(self):
with patch('module_under_test.A') as mocked_A:
mocked_A.return_value = 42
result = module_under_test.B()
mocked_A.assert_called_with()
self.assertEqual(result, 420)
'patch'是不是一個模塊。您是否閱讀過「mock」文檔,哪部分不清楚? –
我的壞意思是修補程序修飾器和模擬模塊。 – psbits