Inspec中是否有模拟对象的概念?我想模拟一个REST API,因为在我的构建管道中没有提供该API的服务器。
InSpec建立在RSpec之上,C0是Ruby中流行的测试库。幸运的是,RSpec支持许多forms of mocking,包括Mocks and Stubs。
[如果您有一些包装此REST API功能的中间类,说您将其称为ServiceGateway
,则可以在您的InSpec测试中使用RSpec double
模拟该服务,如下所示:
gateway = double('ServiceGateway')
expect(gateway).to receive(:get_data).and_return({ data: [1,2,3] })
# instantiate class under test providing the double to execute the rest of the test.
您应始终检查所使用的InSpec版本取决于哪个RSpec版本。您可以通过查看Gemfile.lock
文件或RubyGems.org的传递视图来实现。例如,InSpec 4.18.104
depends on RSpec 3.9.0
transitively through the inspec-core
gem。
[最后的想法,如果您打算与REST API进行交互,并希望更真实地表示它们返回的内容,以进行更“端到端”的样式测试(InSpec最终会做到这一点,请考虑加入[ C0]。此gem执行API的记录/播放,第一次进行真正的调用,并在后续测试中使用保存的结果。有时确实会给您一种错误的安全感(它将错过API更改),但确实会提供完整的端到端体验。