本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
模拟客户端响应和错误
了解如何在适用于 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