2016-06-12 2 views
0

안녕하세요, 장고의 견해를 테스트하고 싶습니다. 뷰의 내부에서 나는 그들의 메소드 중 일부를 조롱하고 싶은 두 개의 객체를 생성합니다. 내가보기에 내 테스트 케이스 단계를 디버깅 할 때 시험이패치로 만든 모의 객체 메소드의 부작용을 수정했습니다.

@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"})) 

처럼 보이는, 뷰 내부에 생성 된 객체는 모의 객체의 타입 인 것이 사실이다. 그러나 get_value 메소드는 side_effect 함수를 사용하지 않지만 MockingObject도 리턴합니다. 어떻게 장고보기에서 mocking 개체의 변경 사항을 전달할 수 있습니까? 패치 버전이 다음과 동일합니까?

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

더 많은 조치가 필요합니까?

+0

패치가 까다로울 수 있습니다. 아마도'MockFirstObject.get_value.return_value.side_effect'를 설정해야합니까? –

+0

나는 그것을 시도 할 것이다 .0.ty ... 지금까지 Java에서 Mockito와 조금 다릅니다. – Apostolos

+0

Unfortunatelly 그것이 작동하지 않았다 ... – Apostolos

답변

0

나는 내 문제를 해결하기 위해 finnaly 관리했습니다. 테스트 기능

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

내가 다른 모의 개체에 대해했던 것과 같은에서

: 내가 한 일은 다음이었다.