2013-08-11 3 views
2

나는 fun3 현재 logger.info 메시지를 출력이for 루프를 사용하여 함수를 단위 테스트하려면 어떻게합니까?

def fun1(self, p1, p2): 

    #fun2 fetches data from db and creates doc_list - (return db.coll.find(query using p1 and p2), new query using p1 and p2) 

    doc_list = self.fun2(p1, p2)  
    for doc in doc_list: 
     self.fun3(p2, doc) 

같은 기능을 가지고있다. 이 함수에 대한 단위 테스트를 작성하고 싶지만 for 루프가있는 것처럼 이것이 리팩토링되어야하는 방법이 확실하지 않습니다. 최종 목표는 내 자신의 하드 코딩 된 데이터 (스푸핑 f2 데이터)와 db 쿼리 기능에서 오는 데이터를 스푸핑 할 수있는 단위 테스트를하는 것입니다 아마도 단위 테스트 fun1 동안 모든 목록 내용을 테스트합니다. 감사합니다

+0

다른 언어로되어 있지만 밀접하게 관련된 질문 : http://stackoverflow.com/q/10614794/1301972. –

+0

고마워, 나는 이해하지만 나는 더 이상 시험을 쓸 수없는 시점에 도달했다. 나는 코드를 리팩토링하고 거꾸로 돌아왔다. 나는 이것을 최상위 수준의 호출로 테스트를 계속할 수 있도록 테스트 할 수 있기를 원하며 더 이상 수동으로 일부를 수동으로 테스트해야하는 것에 대해 걱정하지 않아야한다. 감사! – user1427026

답변

3

당신도 할 수 mock 패키지 사용 :

  • 모의 클래스 fun1Mock(return_value=<your_mocked_return_value>) 모의와 fun2fun3
  • 모의
  • class.fun2class.fun3보다 우선 사용자 정의 클래스에 포함되어 있습니다. 적절한 전화를 테스트하려면 mock.call_count 또는 mock.call_args을 사용할 수 있습니다.
+0

감사합니다.하지만 불행히도 단위 테스트를 시작할 때 모의에 익숙하지 않았습니다. 이미 파이썬의 unittest 모듈을 사용하고 있습니다. – user1427026

+3

'모의 (mock) '는'unittest'와 함께 사용할 수 있습니다. –

관련 문제