Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 更改模拟对象的副作用';使用修补程序创建的方法_Python_Django_Unit Testing_Mocking_Python Mock - Fatal编程技术网

Python 更改模拟对象的副作用';使用修补程序创建的方法

Python 更改模拟对象的副作用';使用修补程序创建的方法,python,django,unit-testing,mocking,python-mock,Python,Django,Unit Testing,Mocking,Python Mock,您好,我想测试django的视图。在视图内部,我创建了两个对象,我想模拟它们的一些方法。测试是这样的 @mock.patch('payments_system.views.FirstObject') @mock.patch('payments_system.helper_functions.SecondObject') def test_make_payment_view_with_success(self, MockFirstObject, MockSecondObject): Mo

您好,我想测试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"}))
当我调试我的testcase并进入我的视图时,的确在视图中创建的对象是mock类型的。但是get_value方法不使用side_effect函数,而是返回一个MockingObject。如何在django视图中传递模拟对象中的更改?修补程序版本是否与以下版本相同

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

我还需要做点什么吗?

我终于解决了我的问题。我所做的是:

在测试函数中

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

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

修补可能很棘手。您是否需要设置
MockFirstObject.get\u value.return\u value.side\u effect
?我会试试看是的..是的..只是它与我目前使用的Java中的Mockito有点不同。不幸的是,它不起作用。。。