Python/Django unittest,如何处理外呼?

Python/Django unittest, how to handle outside calls?

我多次读到应该使用 mock 来模拟外部调用,并且不应调用任何外部服务,因为无论外部服务如何,您的测试都需要 运行。

这完全有道理....但是

外部服务有什么变化?测试有什么用,测试我的代码是否正常工作,如果我永远不知道它何时因外部服务中断而中断 modified/updated/removed/deprecated/etc...

我该如何调和呢?伪代码如下

function post_tweet:
    data = {"tweet":"tweetcontent"}
    send request to twitter
    receive response 
    return response

如果我嘲笑它,我将无法收到 Twitter 更改其 API 的通知,现在我必须更新我的测试...

有不同级别的测试。

单元测试 正在测试,正如您可能从名称中猜到的那样,是一个单元。例如一个函数或方法,可能是 class。如果您对其进行更广泛的解释,它可能包含一个要使用 Djangos 测试客户端进行测试的视图。单元测试从不测试外部的东西,比如库、依赖项或与其他系统的接口。这些东西会被嘲笑。

集成测试 正在测试您的接口以及外部库、系统和 API 的使用是否正确实施。如果依赖关系发生变化,您会注意到必须更改代码和单元测试。

还有其他级别的测试,例如行为测试、UI 测试、可用性测试。您应该确保在您的项目中将这些测试 class 分开。