我有一个类到外部服务器,然后自然地检索我做一些处理的数据。我真的需要对整个事情进行单元测试,但是每次我提出请求时我都不想继续使用外部服务器。我的问题:这个适当的协议是什么?我使用生菜,但我也对其他想法持开放态度。
这是我的班级:
## 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" }
答案 0 :(得分:1)
使用mock objects测试网络。
使用类包装您的网络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类必须通过网络管理器类发出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()