Hallo Ich möchte eine Ansicht von Django testen. Innerhalb der Ansicht erstelle ich zwei Objekte, denen ich einige ihrer Methoden vortäuschen möchte. Der Test sieht wie folgt ausÄndern der Nebeneffekt der Methode eines Mock-Objekts erstellt mit Patch
@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"}))
Wenn ich meine Testfall und Schritt debuggen in meiner Ansicht, ist es wahr, dass die Objekte in der Ansicht erstellt sind vom Typ der Mocks. Die Methode "get_value" verwendet jedoch nicht die Funktion side_effect, sondern gibt auch ein MockingObject zurück. Wie kann ich die Änderung in den Mocking-Objekten in der Django-Ansicht übergeben? Ist die Patch-Version die gleiche wie die folgende?
MockFirstObject = MagicMock(spec=payments_system.views.FirstObject)
MockSecondObject = MagicMock(spec=payments_system.helper_functions.SecondOjbect)
Muss ich etwas mehr tun?
Patchen kann schwierig sein. Müssen Sie vielleicht 'MockFirstObject.get_value.return_value.side_effect' setzen? –
Ich werde es versuchen ja .. es ist nur ein bisschen anders als Mockito in Java, die ich bisher verwendet habe. – Apostolos
Leider hat es nicht funktioniert ... – Apostolos