我正在编写一个简单的应用程序,它允许我搜索和检索有关我的 AWS 使用情况的数据。我正在使用 Ruby aws-sdk
gem 连接到 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和区域等等被传入。即我希望能够断言模拟配置对象是用正确的键调用的等等
我看不到如何做到这一点......因为我似乎无法传入模拟对象......而且我也看不到如何在被测类上模拟该方法。在这个阶段我的理解崩溃了......帮助!