【问题标题】:changing the side effect of a mock object's method created with patch更改使用补丁创建的模拟对象方法的副作用
【发布时间】:2016-06-12 08:09:37
【问题描述】:

你好,我想测试一个 django 的视图。在视图内部,我创建了两个对象,我想模拟它们的一些方法。测试是这样的

@mock.patch('payments_system.views.FirstObject')
@mock.patch('payments_system.helper_functions.SecondObject')
def test_make_payment_view_with_success(self, MockFirstObject, MockSecondObject):

    MockFirstObject.get_value.side_effect = get_value_side_effect   //this function is defined and implemented outside my testcase class

    MockSecondObject.is_valid.return_value = True

    factory = RequestFactory()
    request = factory.post(reverse('cardinal-term_url'), data=dict(PaRes="test_parese", MD=None))
    self._add_session_to_request(request)
    session_data = dict(amount=1000, Centinel_PIType="VISA", Card_Number="40000000000000001", ExpMonth=06,
                        ExpYear=2016, Cvv2='123')
    request = self._add_session_data_to_request(request, **session_data)
    response = term_url(request)

    self.assertRedirects(response, reverse('payments_system-success', kwargs={"token": "some_token"}))

当我调试我的测试用例并进入我的视图时,在视图中创建的对象确实是 Mocks 类型的。但是 get_value 方法不使用 side_effect 函数,但也返回一个 MockingObject。如何在 django 视图中传递模拟对象的更改?补丁版本是否与以下相同?

MockFirstObject = MagicMock(spec=payments_system.views.FirstObject)
MockSecondObject = MagicMock(spec=payments_system.helper_functions.SecondOjbect)

我需要做更多的事情吗?

【问题讨论】:

  • 修补可能很棘手。您是否需要设置MockFirstObject.get_value.return_value.side_effect
  • 我会试试的,是的..ty...它与我目前使用的 Java 中的 Mockito 有点不同。
  • 不幸的是它没有工作......

标签: python django unit-testing mocking python-mock


【解决方案1】:

我终于设法解决了我的问题。我所做的如下:

在测试函数中

mock_object1_instance = MockFirstObject1.return_value
mock_object1_instance.get_value.side_effect = get_value_side_effect

我对另一个模拟对象所做的相同。

【讨论】:

    猜你喜欢
    • 2018-02-14
    • 1970-01-01
    • 2015-12-17
    • 1970-01-01
    • 1970-01-01
    • 2011-10-17
    • 1970-01-01
    • 1970-01-01
    • 2015-06-18
    相关资源
    最近更新 更多