2016-06-12 27 views
0

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?

+0

Patchen kann schwierig sein. Müssen Sie vielleicht 'MockFirstObject.get_value.return_value.side_effect' setzen? –

+0

Ich werde es versuchen ja .. es ist nur ein bisschen anders als Mockito in Java, die ich bisher verwendet habe. – Apostolos

+0

Leider hat es nicht funktioniert ... – Apostolos

Antwort

0

Ich habe es endlich geschafft, mein Problem zu lösen. Was ich tat, war die folgende:

in der Testfunktion

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

das gleiche ich für den anderen Mockobjekt tat.