7

我从不喜欢写模拟,不久前这里有人推荐使用 FakeWeb。我立即完全爱上了 FakeWeb。但是,我不得不怀疑使用 FakeWeb 是否有缺点。似乎模拟仍然更常见,所以我想知道我错过了什么,而使用 FakeWeb 有什么问题。是否存在某种 Fakeweb 无法涵盖的错误,或者与 TDD 或 BDD 流程有关?

4

2 回答 2

20

您可能会对 VCR 感到满意,它是 HTTP 模拟库的包装器。它缓存原始 HTTP 请求,以便您的测试快速且离线工作,但也可以更改为再次执行原始请求,以查看测试是否适用于远程 API。

https://github.com/myronmarston/vcr

于 2011-03-17T11:02:38.240 回答
8

你应该看看 WebMock http://github.com/bblimke/webmock

模拟 http 请求的缺点是缺乏对远程 API 更改的保护。如果远程 HTTP 服务发生更改,并且您的代码将不再兼容,您的测试将不会告诉您这件事。如果你自己模拟 http 客户端方法,你也会遇到同样的问题。最好有一些集成测试套件来验证您的代码仍然可以与真正的 http 服务对话。

像 FakeWeb 或 WebMock 这样的库的优势在于,您可以专注于实现行为,而不必担心特定 http 客户端库的实现细节。即使您将库从例如 Net::HTTP 更改为 RestClient,该行为仍应保留,因此测试仍应通过。如果您自己模拟 http 客户端,则必须在更改实现时更改测试,即使行为没有改变。使用 FakeWeb 或 Webmock 也有助于 TDD 或 BDD(先测试)。在担心特定 http 客户端的实现细节之前,您可以使用规范或测试来指定 http 行为。

于 2010-03-18T22:40:01.283 回答