2014-10-14 6 views
1

외부 서버로 나가서 자연스럽게 처리 할 데이터를 검색하는 클래스가 있습니다. 이 모든 것을 단위 테스트해야하지만, 요청할 때마다 외부 서버를 계속 치고 싶지는 않습니다. 내 질문 : 이것에 대한 적절한 프로토콜은 무엇입니까? 나는 상추를 사용하고 있지만 다른 아이디어도 열어두고 있습니다. 어떻게해야합니까외부 HTTP 요청 모의

## in my class 
class SomeClass: 
    def doHttpGet(self): 
     ## return request from http://somewhere.com 

내가 doHttpGet를 오버라이드 (override)입니다 ...

class SomeClass: 
    def doHttpGet(self): 
     ## return { "some": "data", "which": "mocks" }  
+0

을 본 적이 있나요? – Brandon

+0

내 http get 코드에서, 모든 원격 HTTP 요청을 내 시스템에있는 정적 테스트 파일로 다시 라우팅하는 글로벌'if TESTING : ... '문이 있습니다. 가장 우아한 것은 아니지만 작동합니다. – speedplane

+0

'somewhere.com'에서 어떻게 데이터를 가져 옵니까? 'urllib (2) '를 통해서인가? – GergelyPolonkai

답변

1

사용 mock objects 테스트 네트워킹 :

여기 내 클래스입니다.

클래스로 네트워크 API를 래핑하십시오 (예 : NetworkManager. 메소드 makeRequest()가 실제 HTTP 요청을 작성합니다.

class MockNetworkManager(NetworkManager): 
    def makeRequest(self): 
     return testingResponse 

귀하의 SomeClass 클래스는 네트워크를 통해 HTTP 요청을해야합니다

class NetworkManager: 
    def makeRequest(self): 
     # Do an HTTP request to the server, return response 

단위 테스트는 네트워크를 건드리지 않고하여 makeRequest() 메소드 반환에 필요한 테스트 데이터를 오버라이드 (override) 네트워크 매니저의 모의 클래스를 사용해야합니다 매니저 클래스. 프로덕션 환경에서는 NetworkManager 인스턴스를 사용하고 실제 네트워크 요청을 수행합니다. 테스트 환경에서 SomeClass는 MockNetworkManager 인스턴스를 사용합니다. 생산 코드에서

class SomeClass: 

    def __init__(self, network): 
     network = network 

    def doHttpGet(self): 
     response = self.network.makeRequest() 

:

some = SomeClass(NetworkManager()) 
some.doHttpGet() 

단위 테스트에서 : http://www.voidspace.org.uk/python/mock/ : 당신이

some = SomeClass(MockNetworkManager()) 
some.doHttpGet()