【问题标题】:TDD web api that controls hardware控制硬件的 TDD web api
【发布时间】:2023-04-06 16:31:01
【问题描述】:

我开发了一个 gem,它封装了一个用于控制远程电灯开关和调光器的 C api。当我开发这个 gem 进行测试时,我在编译时用一些链接魔法模拟了底层的 C api,它工作得很好,我可以在没有正确硬件的情况下在我的桌面上开发等等。

现在我想在另一个项目中使用这个 gem 来围绕它包装更高级别的 REST API,但我正在努力进行测试。

我应该如何在不需要硬件的情况下测试我的 REST API。我是否应该在项目中将我的低级 api 作为 git 子模块包含在内,并在加载路径中乱七八糟,以便我可以重用低级模拟?

或者我应该再次模拟新项目的整个 API 吗?我在这里完全不知所措。

欢迎任何关于此的提示或讨论

【问题讨论】:

    标签: ruby rspec tdd


    【解决方案1】:

    如果我理解正确,您想用另一个公开 REST API 的层来包装用于包装 C Api 的相同“gem”。我对吗? 如果是这样,您应该模拟 gem 或 C API,就像您对 gem 所做的那样。

    “纯”TDD 从业者通常建议隔离最小的部分(即模拟 gem)以推动 SRP(单一责任原则)。

    另一方面,当我添加的层(在这种情况下为 REST API)主要是一个包装器并且没有很多自己的“业务逻辑”时,我个人更喜欢编写我的测试更像是集成测试而不是纯单元测试,以便我在正确的上下文中测试新层。 (即一起测试 Rest API + gem,并模拟唯一的 C API)

    如果此 REST API 纯粹是一个包装器,那么您可能可以重用您的测试,方法是将它们推送到一个基类并派生 2 个子类:一个用于测试 gem 本身,一个用于通过 REST API 对其进行测试。 无论如何,我总是一起重构我的测试和我的代码以消除重复。有时这会导致我改变我模拟的和不模拟的,并改进整体设计,包括 CUT 和测试本身。

    HTH...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-12
      • 1970-01-01
      • 1970-01-01
      • 2017-03-18
      • 2013-12-29
      相关资源
      最近更新 更多