1

我有一个到外部服务器的类,自然会检索我进行一些处理的数据。我真的需要对整个事情进行单元测试,但我不想每次提出请求时都一直访问外部服务器。我的问题:什么是正确的协议?我正在使用生菜,但我也对其他想法持开放态度。

这是我的课:

## 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" }     
4

1 回答 1

1

使用模拟对象来测试网络。

用一个类包装你的网络 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()
于 2015-04-09T11:58:44.050 回答