【问题标题】:Is testing for REST access necessary/good?测试 REST 访问是否必要/好?
【发布时间】:2015-09-22 07:14:33
【问题描述】:

我使用 django-rest-framework 制作了一个休息 API。

我有多个 API 端点。有些用于创建对象,有些用于列出对象,有些用于获取对象的计数等。

在我的测试中,我测试每个端点以确保创建端点将只接受 POST 请求。我测试列表端点以确保它们只接受 GET,而不接受 POST/PUT/PATCH/DELETE。每个端点对应一个视图,该视图具有确定它们允许哪些请求的设置,但测试确保这些设置有效。测试主要断言返回某个状态代码。

测试变得非常重复。 cmets API 的测试大约有 600 行。这种测试是否必要,和/或是否有简化的替代方法?

【问题讨论】:

    标签: django rest unit-testing testing django-rest-framework


    【解决方案1】:

    这属于测试反模式类别,您在其中测试框架/库而不是您自己的代码。

    像这样的一些测试是值得的,特别是如果您不熟悉该框架,它们可以用来验证您对它的使用。但是,详尽地测试它会浪费您在测试应用程序代码上花费的精力。

    如果你真的觉得某个框架或库有问题但你仍然想使用它,你最好直接测试它,即 fork 项目(假设它是开源的),添加一些测试,然后做一个拉取请求。

    【讨论】:

    • 这也是一个很好的答案——我从来没有想过这个问题。希望我能接受两个答案!
    【解决方案2】:

    我偶然发现了这个很酷的库:django-rest-assured,它似乎在测试这种 REST 访问时减少了很多样板。这使得测试该功能变得更加简单,甚至可能值得您花时间。

    【讨论】:

    • 是的,django-rest-assured 是专门为此目的而构建的(我是它的作者)。但是,虽然非常适合为您的 API 构建完整的测试覆盖范围,但随着项目的发展和成熟,您应该将其减少到应用程序所需的最低限度,以便测试的简单性、性能和可维护性。
    【解决方案3】:

    在编写冗余测试和为系统的关键区域获得足够的代码覆盖率之间总会有一个很好的平衡。

    由于您的应用程序中的端点很可能有很多移动部分(即响应/请求解析、HTTP 调用、访问数据存储等),您可能会发现过多的测试会大大降低您的测试套件的速度.

    您经常会发现,结合大量标准单元测试(无 i/o),少量有针对性的端到端测试就足够了。 关键是在关键代码覆盖率和测试套件的可靠性能之间找到健康的平衡。

    关于这方面有一个很棒的 Stack Overflow 主题,Kent Beck 讨论了一个高效的测试套件:

    How deep are your unit tests?

    【讨论】:

    • 太棒了!感谢您的链接!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-04
    • 2012-11-21
    • 1970-01-01
    相关资源
    最近更新 更多