模拟客户端响应和错误 - Amazon 适用于 Ruby 的 SDK
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

模拟客户端响应和错误

了解如何在适用于 Ruby 的 Amazon SDK 应用程序中模拟客户端响应和客户端错误。

模拟客户端响应

在模拟响应时,适用于 Ruby 的 Amazon 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

模拟客户端错误

您还可以模拟适用于 Ruby 的 Amazon SDK 在特定方法中引发的错误。以下示例显示了 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