2010-10-11 4 views
10

저는 C# dev을 파이썬으로 옮겨 놓고 있습니다. 그래서 저는 아직 어떤 일을하고 있는지 알지 못합니다. 필자는 Python과 함께 Dependency Injection이 실제로 필요 없다고 읽었습니다. 코드에서 객체를 인스턴스화하고 원하는대로 실행할 수 있다고 들었지만 테스트에서 정의 된 내 스텁 (예 : 모의가없는 객체)의 메소드를 가리킬 수 있습니다.모의 (mock)없이 파이썬 메소드를 스텁하는 방법

사실인가요? 나는 그것을 해보려고 노력했으나 제대로 작동시키지 못했습니다. 이것이 실제로 어떻게 이루어 집니까? mocking 라이브러리없이 파이썬에서 메소드를 스텁하는 방법은 무엇입니까?

답변

25

다음은 기본 예입니다. 프로덕션 getData() 메서드는 절대로 호출되지 않습니다. 그것은 스텁으로 조롱되었습니다.

import unittest 
class ClassIWantToTest(object): 

    def getData(self): 
     print "PRODUCTION getData called" 
     return "Production code that gets data from server or data file" 

    def getDataLength(self): 
     return len(self.getData()) 

class TestClassIWantToTest(unittest.TestCase): 

    def testGetDataLength(self): 
     def mockGetData(self): 
      print "MOCK getData called" 
      return "1234" 

     origGetData = ClassIWantToTest.getData 
     try: 
      ClassIWantToTest.getData = mockGetData 
      myObj = ClassIWantToTest() 
      self.assertEqual(4, myObj.getDataLength()) 
     finally: 
      ClassIWantToTest.getData = origGetData 

if __name__ == "__main__": 
    unittest.main() 
+0

감사합니다. 이게 내가 찾는거야. –

+0

이것은 내가 바라는 바로 그 것이다. 그러나 나는 그것이 더 어려울 것이다라고 생각했다.) – Sean

관련 문제