exception - stub AWS SDK 函数以返回异常(自 SDK v. 2.1 起)

标签 exception amazon-web-services rspec amazon-ec2 stub

我在规范中对 AWS SDK 调用使用 stub 响应,并且我始终能够 stub 带有异常的函数,然后根据情况测试它是否被适当捕获或引发。这将是迄今为止一直在工作的 MWE:

let(:aws_creds) { ::Aws::Credentials.new('a', 'b') }
let(:ec2_dummy_client) { ::Aws::EC2::Client.new(credentials: aws_creds, stub_responses: true) }

...

describe 'delete_vpc' do
  it 'raises on non-existent VPC' do
    ec2_dummy_client.stub_responses(:delete_vpc, Aws::EC2::Errors::InvalidVpcIDNotFound)
    expect{ec2_dummy_client.delete_vpc(vpc_id: "vpc-a08b44c5")}.to raise_exception(Aws::EC2::Errors::InvalidVpcIDNotFound)
  end
end

但是,自从从 AWS SDK 2.0 升级到 2.1 以来,我不断收到此(现实世界)错误:

 Failure/Error: expect{ec2_dummy_client.delete_vpc(vpc_id: "vpc-a08b44c5")}.to raise_exception(Aws::EC2::Errors::InvalidVpcIDNotFound)
   expected Aws::EC2::Errors::InvalidVpcIDNotFound, got #<ArgumentError: wrong number of arguments (0 for 2)> with backtrace:
     # ./spec/lib/backends/ec2_backend_spec.rb:691:in `block (5 levels) in <top (required)>'
     # ./spec/lib/backends/ec2_backend_spec.rb:691:in `block (4 levels) in <top (required)>'

我意识到我分配异常代替返回结构的方法一开始可能有点天真,尽管它有效。但是,正确的方法是什么?

最佳答案

事实证明,带有错误的 stub 函数是正确的方法,但 AWS 接口(interface)在 SDK v. 2.0 和 2.1 之间发生了变化。

一些错误(不是全部)现在是类 ServiceError,其构造函数需要两个强制属性:contextmessage

对于一个简单的规范,只需初始化它们就足够了,这样问题中给出的 MWE 就可以像这样修复:

let(:aws_creds) { ::Aws::Credentials.new('a', 'b') }
let(:ec2_dummy_client) { ::Aws::EC2::Client.new(credentials: aws_creds, stub_responses: true) }

...

describe 'delete_vpc' do
  it 'raises on non-existent VPC' do
    ec2_dummy_client.stub_responses(:delete_vpc, Aws::EC2::Errors::InvalidVpcIDNotFound.new(Seahorse::Client::RequestContext.new,"VPC does not exist"))
    expect{ec2_dummy_client.delete_vpc(vpc_id: "vpc-a08b44c5")}.to raise_exception(Aws::EC2::Errors::InvalidVpcIDNotFound)
  end
end

请注意对 stub_responses() 调用中的 .new(...) 部分。

关于exception - stub AWS SDK 函数以返回异常(自 SDK v. 2.1 起),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30869403/

相关文章:

javascript - 抛出异常 : Node. js 与 Gevent

python - ImportError : Could not import settings (Is it on > sys. 路径?设置文件中是否存在导入错误?)在 AWS Elastic Beanstalk 上

python - ImportError : cannot import name 'docevents' from 'botocore.docs.bcdoc' in AWS CodeBuild

ruby-on-rails - 在窗口 : Webpack binstubs not found 中运行 rspec 时出错

ruby-on-rails - Rspec 中的动态期望

ruby-on-rails - 在 Rails 应用程序中更改 PostgreSQL 表会禁用触发器

exception - 吞噬 IObservable 异常

java - 为什么我得到 java.io.EOFException?

amazon-web-services - 图像上的 S3 cloudfront 到期 - 性能非常慢

.net - 引发异常的性能注意事项