web-dev-qa-db-ja.com

AWSAPIに対して記述されたコードをどのようにテストしますか

Javaで、AWS S3までファイルをアップロードするアプリケーションを作成しています。ファイルはハードコードされていない引数でアプリケーションに渡されます。テストを作成したいのですが、ファイルが実際にS3にアップロードされていることを確認します。テストはTDDのコードの前に記述されます(実際にはすでにコードを記述していますが、TDDのプラクティスをすべての作業に習慣として取り入れたいと思います)

これをどの程度正確に実行しますか?私が最もよく知っているのはJUnitを使用することです。

助けてくれてありがとう。

19
BrianJakovich

実際のアップロードとそれを実行するテストは、ユニットテストではなく、統合テストの一部です。 S3 APIを非常に薄いクラスでラップする場合は、ビジネスクラスの単体テスト用にそのクラスをモックし、統合テスト用に実際の実装を使用します。
決定した場合、businessクラスを直接取得するAmazonS3インターフェイス、ユニットテストではそのクラスをモックする必要があります。

実際の探索的テスト(学習と検証)Amazon s3が機能するかどうか、またどのように機能するかは、別の実験セットアップで実際に行うことです。

P.S. AmazonS3インターフェースをビジネスクラスで直接使用することはお勧めしません。むしろ、「バックエンドストレージ」を変更する場合に簡単に変更できるように、薄いインターフェースでラップすることをお勧めします。

20
Op De Cirkel

私はJavaプログラマーではありませんが、おそらく モック を調べたいと思うでしょう。 MockService と呼ばれるSoapUIツールがあります。 AWSが提供するような外部サービスのモック。

4
Brian Lyttle

Op De Cirkelの回答は単体テストの範囲では適切ですが、フレームワークサポートを作成している場合、またはテスト中にAWS S3呼び出しを実行する必要がある場合、次のことができます。 AWS互換のAPIを提供するサービスを実行します。 OpenStack はそれらの1つであり、仮想マシンで実行できます( DevStack を参照)。

または、AWS互換のAPIを提供するさまざまなテスト指向のツールから選択できます。

S3サービスを公開するものは次のとおりです。

  • S3Ninja (実際にはJavaで書かれています)
  • FakeS ​​(ルビー)
  • s3mock (Scala with Java API)
3
eskatos

上記の回答で示唆されているように、より良いアプローチはAWSAPI応答をモックすることです。 APIアクションの錯覚を取得する別の方法は、ドライランモード/パラメーターを使用してAWSSDKまたはAPIを呼び出すことです。ただし、テストの実行中にインターネットアクセスが必要になる場合があります。

http://docs.aws.Amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/ec2/model/DryRunResult.html

2
Hrishikesh

LocalStack は、統合テストのために完全に機能するローカルクラウド環境を起動するフレームワークです。

LocalStackは、S3、Kinesis、Lambda、DynamoDBなどを含むAWSクラウドサービスのサブセットを提供します。

2
whummer

質問はずっと前に答え​​られましたが、私は別のアプローチについてコメントしたいと思います。

さまざまなPythonプロジェクトで使用している このライブラリ 。=のような他の言語で開発している場合でも、非常に便利であることがわかりました。 JavaまたはScalaバックグラウンドサーバーをセットアップして、すべてのAWS呼び出しをモックできるため。

「スタンドアロンサーバーモード」の詳細については、READMEの最後にあります。

1
igonzalez