2

我正在编写一个简单的应用程序,它允许我搜索和检索有关我的 AWS 使用情况的数据。我正在使用 Ruby aws-sdkgem 连接到 AWS。

进入我可以查询 AWS 的阶段的过程是 2 个阶段:

1)建立连接:

AWS.config({access_key_id: 'REDACTED', secret_access_key_id: 'REDACTED', region: 'eu-west-1'})

这将返回一个AWS::Core::Configuration对象。

2) 获取我希望查询的 AWS 资源的对象:

ec2 = AWS::EC2.new(:ec2_endpoint => 'ec2.eu-west-1.amazonaws.com')

现在我可以获取数据...

我希望能够编写对来自 AWS 的数据进行操作的单元测试。显然我不想每次都调用 AWS……所以我想创建一个测试替身来代替 AWS。我了解如何执行此操作:

describe AwsThing do
  it 'gets images' do
    amis = OpenStruct.new
    ec2 = double('ec2-api')
    ec2.should_receive(:images}.and_return amis
    expect(subject.find_image(ec2, 'handy-tag')).to eql 'an-ami-that-I-tagged'
  end
end

所以该AwsThing#find_image方法使用了ec2 mock,我可以测试该方法的逻辑。都好。

但是,我还想测试获得该 ec2 连接的过程 - 上面的两个步骤。我想我希望能够编写这样的测试:

it 'gets an AWS API connection' do
  expect(subject.connect(access_key, secret_key, region).to be_a AWS::Core::Configuration
end

如果我调用真正的 API,那效果很好。但我想模拟一下......所以我有测试连接方法,access_key和区域等等被传入。即我希望能够断言模拟配置对象是用正确的键调用的等等

我看不到如何做到这一点......因为我似乎无法传入模拟对象......而且我也看不到如何在被测类上模拟该方法。在这个阶段我的理解崩溃了......帮助!

4

1 回答 1

1

我不知道你为什么要测试它。此功能由您正在使用的 aws-sdk gem 提供。它们具有广泛的测试覆盖率,并确保您尝试测试的内容确实有效。如果您对他们的工作方式感兴趣,请查看 github.com 上的源代码https://github.com/aws/aws-sdk-ruby/tree/master/spec

您应该只测试您自己实际编写的代码和一个集成测试,以确保一切都能很好地协同工作。集成测试几乎就是您已经拥有的。或者我在这里错过了什么?

于 2014-04-10T10:29:47.943 回答