【问题标题】:How to write unit tests to ensure my code follows HTTP redirects?如何编写单元测试以确保我的代码遵循 HTTP 重定向?
【发布时间】:2014-07-13 10:40:20
【问题描述】:

我正在使用 requests 模块在我的模块内部进行 HTTP 调用。

我明白这一点:

r = requests.post('http://github.com', allow_redirects=True)

将遵循 HTTP 重定向。

当然,我从我自己的模块 API 多次调用 requests,我想编写一个单元测试来确保请求始终遵循重定向。我该怎么办?

乍一看,我的想法是在我的测试中启动一个简单的 HTTP 服务器来模拟 HTTP 调用。我不确定如何模拟依赖网络通信的整个 requests 方法调用。

【问题讨论】:

标签: python unit-testing python-requests http-redirect


【解决方案1】:

如果要求您的代码始终遵循重定向,那么我将在接口函数中显式编码。然后坚持所有对requests.post 的调用都是通过您的函数进行的。在最简单的形式中,这只是一个包装方法:

def my_post(*args, **kwargs):
    return requests.post(*args, allow_redirects=True, **kwargs)

如果您想保留现有的 API,只是覆盖其行为,您可以使用 monkeypatch 和 decorate the third-party function at runtime

您应该避免测试库本身是否执行重定向。这应该在其他地方进行测试,并且大概您信任该库。您需要测试的只是您正确调用了库函数。这是一般原则。

这使您的测试简单:只需模拟对requests.post 的调用,并确认您想要的参数(包括allow_redirects=True)已通过。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-01
    • 2021-04-29
    • 2013-12-05
    • 1970-01-01
    • 2020-06-25
    • 2013-06-02
    • 1970-01-01
    相关资源
    最近更新 更多