在 Amazon SDK for Ruby 应用程序中添加带存根的测试 - Amazon 适用于 Ruby 的 SDK
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

在 Amazon SDK for Ruby 应用程序中添加带存根的测试

了解如何在 Amazon SDK for Ruby 应用程序中存根客户端响应和客户端错误。

模拟客户端响应

当你存根响应时, Amazon 适用于 Ruby 的 SDK 会禁用网络流量,客户端会返回存根(或虚假)数据。如果您未提供模拟的数据,则客户端会返回:

  • 作为空数组的列表

  • 作为空哈希的映射

  • 数值 0

  • 日期 now

以下示例返回 Amazon S3 存储桶列表的模拟的名称。

require 'aws-sdk' s3 = Aws::S3::Client.new(stub_responses: true) bucket_data = s3.stub_data(:list_buckets, :buckets => [{name:'aws-sdk'}, {name:'aws-sdk2'}]) s3.stub_responses(:list_buckets, bucket_data) bucket_names = s3.list_buckets.buckets.map(&:name) # List each bucket by name bucket_names.each do |name| puts name end

运行此代码将显示以下内容。

aws-sdk aws-sdk2
注意

在您提供任何模拟的数据后,默认值将不再应用于任何剩余的实例属性。这意味着在上一个示例中,剩余实例属性 creation_date 不是 now,而是 nil

适用于 Ruby 的 Amazon SDK 可以验证您的存根数据。如果您传入的数据的类型错误,则会引发 ArgumentError 异常。例如,如果您使用以下内容,而不是 bucket_data 以前的分配:

bucket_data = s3.stub_data(:list_buckets, buckets:['aws-sdk', 'aws-sdk2'])

适用于 Ruby 的 Amazon SDK 引发了两个ArgumentError例外。

expected params[:buckets][0] to be a hash expected params[:buckets][1] to be a hash

模拟客户端错误

您还可以存根 Amazon SDK for Ruby 针对特定方法引发的错误。以下示例显示了 Caught Timeout::Error error calling head_bucket on aws-sdk

require 'aws-sdk' s3 = Aws::S3::Client.new(stub_responses: true) s3.stub_responses(:head_bucket, Timeout::Error) begin s3.head_bucket({bucket: 'aws-sdk'}) rescue Exception => ex puts "Caught #{ex.class} error calling 'head_bucket' on 'aws-sdk'" end