2

我正在构建一个 API 包装器并为它编写一些测试,我有几个问题。

1)我如何assert为不存在数据的调用编写一个?例如,使用 API 通过 id 查找成员,但该用户尚不存在。
2)我如何编写assert测试PUTDELETE请求?

我已经掌握了测试GETPOST请求,只是不确定其他 2 个动词。

4

1 回答 1

2

对于您的问题第 1 部分...

对于不存在的数据,您有几个选择:

  1. 您可以提前创建数据,例如使用测试种子文件、夹具或工厂。对于具有更复杂数据安排的大型项目,我喜欢这种选择。我也喜欢这种让事情先运行的选择,因为它更直接地查看数据。

  2. 您可以创建一个测试替身,例如存根方法或假对象。我喜欢这个选择以获得最快的测试性能和最好的隔离。对于最快的测试,我会尽早拦截呼叫。权衡是我没有进行端到端测试。

对于您的问题第 2 部分...

您应该编辑您的问题以显示您的实际代码;这将帮助这里的人回答你。

你的录像机代码是这样的吗?

VCR.use_cassette('test_unit_example') do
  response = Net::HTTP.get_response('localhost', '/', 7777)
  assert_equal "Hello", response.body
end

如果是这样,您更改 HTTP get to put,如下所示:

uri = URI.parse(...whatever you want...)
json = "...whatever you want..."
req = Net::HTTP::Put.new(uri)
req["content-type"] = "application/json"
req.body = json
request(req)

与 HTTP 删除相同:

Net::HTTP::Delete.new(uri)

一篇好的博文是 http://www.rubyinside.com/nethttp-cheat-sheet-2940.html>Net::HTTP 备忘单摘录在这里:

# Basic REST.
# Most REST APIs will set semantic values in response.body and response.code.
require "net/http"

http = Net::HTTP.new("api.restsite.com")

request = Net::HTTP::Post.new("/users")
request.set_form_data({"users[login]" => "quentin"})
response = http.request(request)
# Use nokogiri, hpricot, etc to parse response.body.

request = Net::HTTP::Get.new("/users/1")
response = http.request(request)
# As with POST, the data is in response.body.

request = Net::HTTP::Put.new("/users/1")
request.set_form_data({"users[login]" => "changed"})
response = http.request(request)

request = Net::HTTP::Delete.new("/users/1")
response = http.request(request)
于 2013-01-30T21:42:21.620 回答