我正在编写一个简单的应用程序,它允许我搜索和检索有关我的AWS使用情况的数据。我正在使用Ruby aws-sdk
gem来获取与AWS的连接。
进入我可以查询AWS的阶段的过程是两个阶段:
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,那可行。但是我想要嘲笑那个......所以我对connect方法,access_key和region等进行了测试。也就是说我希望能够断言用正确的键调用了mock配置对象等
我无法看到如何做到这一点......因为我似乎无法传递一个模拟对象...而且我也看不出如何在被测试的类上模拟该方法。在这个阶段,我的理解打破了......帮助!
答案 0 :(得分:1)
我不知道你为什么要测试它。此功能由您使用的aws-sdk gem提供。他们有广泛的测试覆盖率,并确保您尝试测试,实际上工作。如果您对他们的工作方式感兴趣,请查看github.com https://github.com/aws/aws-sdk-ruby/tree/master/spec
上的来源你应该只测试你自己编写的代码和集成测试,一切都很好。集成测试几乎就是你已经拥有的。或者我在这里遗漏了什么?