【问题标题】:Python/Django unittest, how to handle outside calls?Python/Django unittest,如何处理外部调用?
【发布时间】:2016-09-08 08:41:30
【问题描述】:

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

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

外部服务会发生什么变化?测试有什么用处

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

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

如果我对此进行模拟,则无法通知我 twitter 更改了他们的 API,现在我必须更新我的测试...

【问题讨论】:

    标签: python django unit-testing testing call


    【解决方案1】:

    有不同级别的测试。

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

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

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

    【讨论】:

    • 进一步的建议是:mock 外部调用 twitter 进行 单元测试 以测试您的代码是否正确。然后使用集成测试,你会真正调用twitter的服务,这种测试会让你知道twitter的服务是否改变了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-28
    • 1970-01-01
    • 2019-08-13
    • 2015-05-10
    • 2011-08-09
    • 1970-01-01
    相关资源
    最近更新 更多