我正在围绕boto.dynamodb.layer2
编写一个非常小的Python ORM。我想为它编写测试,但我不希望测试实际与AWS通信,因为这需要复杂的设置,凭据,网络访问等。
由于我计划开源模块,包括源代码中的凭据似乎是一个坏主意,因为我将收取使用费用,并且在环境中包含凭据是一种痛苦。
将我的测试耦合到网络似乎是一个坏主意,因为它会使测试运行速度变慢,或者可能导致测试因网络错误或限制而失败。我的目标不是测试boto的DynamoDB接口或AWS。我只想测试自己的代码。
我计划使用unittest2
来编写测试,并使用mock
来模拟打到网络的boto部分,但我以前从未这样做过,所以我的问题归结为这些:
boto.dynamodb
界面中是否有最适合模拟的特定点?答案 0 :(得分:4)
我认为您有正确的方法,您绝对不希望您的测试与AWS的实际通信捆绑在一起。嘲笑服务绝对是正确的做法。
答案 1 :(得分:4)
完全回答我的问题:
与@ pcalcao的答案一样,嘲笑服务是正确的做法。它甚至没有我想象的那么难 - 测试代码只比测试中的代码略长,而且大多数是测试,而不是管道。
感谢@gamaat让我再看看,boto 执行此操作in its own tests,在httplib
中模拟实际的传输接口级别
模拟boto.dynamodb.layer1
界面(以及boto.connect_dynamodb
)证明是正确的做法。在boto.dynamodb.layer2
和boto.dynamodb.table
设置间谍也有帮助。一旦我开始理解它,我发现mock
是一种乐趣。
Here's my solution,BSD许可。 我将把整个库发布到PyPI,一旦我把它编织了一段时间并整理了一些适当的文档。 I've posted it to PyPI.
答案 2 :(得分:3)
boto中的所有测试最初都是针对实时服务端点的集成测试。我们仍然有这些测试,但也开始添加模拟单元测试。你可能想看看到目前为止的例子。