14

周りに非常に小さな Python ORM を書いていboto.dynamodb.layer2ます。そのためのテストを書きたいと思っていますが、複雑なセットアップ、認証情報、ネットワーク アクセスなどが必要になるため、テストが実際に AWS と通信することは望んでいません。

私はモジュールをオープンソース化するつもりなので、ソースに資格情報を含めるのは悪い考えのように思えます。なぜなら、使用料が発生し、環境に資格情報を含めるのは苦痛だからです。

テストをネットワークに結合することは、テストの実行が遅くなったり、ネットワーク エラーやスロットリングが原因でテストが失敗したりする可能性があるため、悪い考えのように思えます。私の目標は、boto の DynamoDB インターフェイスや AWS をテストすることではありません。自分のコードをテストしたいだけです。

unittest2テストを作成し、ネットワークにヒットする boto の部分をモックアウトするために使用する予定mockですが、これまでにこれを行ったことがないため、私の質問は次のようになります。

  1. 私はこれを正しい方法で行っていますか?
  2. 他の誰かがこれをしましたか?
  3. boto.dynamodbモックアウトするのに最適なインターフェイスの特定のポイントはありますか?
4

3 に答える 3

4

あなたは正しいアプローチをしていると思います。AWS との実際の通信にテストが結び付けられることは絶対に望ましくありません。ここでサービスを嘲笑することは間違いなく正しいことです。

于 2012-08-01T18:14:19.767 に答える
4

私の質問に完全に答えるには:

  1. @pcalcaoの回答と同様に、サービスをモックアウトすることは正しいことでした. 思ったほど難しくはありませんでした。テスト コードはテスト対象のコードよりもわずかに長く、そのほとんどはテストであり、配管ではありません。

  2. @gamaat のおかげで、boto独自のテストでこれを行い、実際のトランスポート インターフェイス レベルでモックを作成しますhttplib

  3. boto.dynamodb.layer1インターフェースを(とともに)嘲笑boto.connect_dynamodbすることは、正しいことであることが判明しました。スパイの設定boto.dynamodb.layer2boto.dynamodb.table役立ちました。mockそれを理解し始めると、それが仕事をする喜びであることがわかりました。

これが私のソリューションです。BSDライセンスです。ライブラリ全体を PyPI に投稿するのは、もう少しドッグフードを作成し、適切なドキュメントをまとめた後です。 PyPIに投稿しました。

于 2012-08-02T13:22:08.777 に答える
3

boto のすべてのテストは、もともとライブ サービス エンドポイントをヒットする統合テストでした。これらのテストはまだありますが、模擬単体テストの追加も開始しています。例として、これまでに何があったかを確認することをお勧めします。

于 2012-08-01T22:47:13.110 に答える