Python 模拟外部HTTP请求

Python 模拟外部HTTP请求,python,django,unit-testing,lettuce,Python,Django,Unit Testing,Lettuce,我有一个类,该类可以发送到外部服务器,自然地检索数据,并对其进行一些处理。我真的需要对整个过程进行单元测试,但我不想每次提出请求时都不断地访问外部服务器。我的问题:什么是合适的协议?我用的是莴苣,但我也乐于接受其他想法 这是我的班级: ## in my class class SomeClass: def doHttpGet(self): ## return request from http://somewhere.com 应该发生的是我重写doHttpGet cla

我有一个类,该类可以发送到外部服务器,自然地检索数据,并对其进行一些处理。我真的需要对整个过程进行单元测试,但我不想每次提出请求时都不断地访问外部服务器。我的问题:什么是合适的协议?我用的是莴苣,但我也乐于接受其他想法

这是我的班级:

## in my class
class SomeClass:
    def doHttpGet(self):
        ## return request from http://somewhere.com
应该发生的是我重写doHttpGet

class SomeClass:
    def doHttpGet(self):
        ## return { "some": "data", "which": "mocks" }     
用于测试网络

用类包装您的网络API,例如NetworkManager。它的方法makeRequest()将发出真正的HTTP请求

class NetworkManager:
    def makeRequest(self):
        # Do an HTTP request to the server, return response
单元测试必须使用NetworkManager的模拟类,该类重写makeRequest()方法,并在不接触网络的情况下返回所需的测试数据:

class MockNetworkManager(NetworkManager):
    def makeRequest(self):
        return testingResponse
SomeClass类必须通过network manager类发出HTTP请求。在生产环境中,它将使用NetworkManager实例并执行真实的网络请求。在测试环境中,SomeClass将使用MockNetworkManager的实例

class SomeClass:

    def __init__(self, network):
        network = network

    def doHttpGet(self):
        response = self.network.makeRequest()
在生产代码中:

some = SomeClass(NetworkManager())
some.doHttpGet()
单元测试中:

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

您看到了吗:?值得一提的是,在我的http get代码中,我有一个全局
if TESTING:…
语句,它将所有远程http请求重新路由到驻留在系统上的静态测试文件。虽然不是最优雅的,但它很有效。你是如何从某处网站获取数据的?是否通过
urllib(2)