2

単体テスト ケースに DynamoDbLocal サーバーを使用しようとしています。そして2つの選択肢を思いついた、

クラスの前にローカルサーバーを開始し、クラスの後に停止するjunitクラスルールを定義します。したがって、基本的には、単体テスト クラスごとにサーバーを起動および停止します。

public class MyDynamoDbLocalServerRule extends ExternalResource {

@Override
protected void before() throws Throwable {
    myInMemoryDynamoDbServer.start();
}

@Override
protected void after() throws Throwable{
        inMemoryDynamoDbServer.stop();
}

また

シングルトン インスタンス:

public static DynamoDBProxyServerContainer createInstance(final int  portToListenIn) {
    if (dynamoLocal == null) {
        synchronized (DynamoDBProxyServerContainer.class) {
            if (dynamoLocal == null) {
                dynamoLocal = new DynamoDBProxyServerContainer(portToListenIn);
            }
        }
    }
    return dynamoLocal;
}

private DynamoDBProxyServerContainer(final int portToListenIn) {
    this.startServer(portToListenIn);
    getRuntime().addShutdownHook(new Thread(() -> stopServer()));
}

どちらをお勧めしますか?これを行う方が良いですか? Guice依存性注入フレームワークで使用できるはずです。

4

1 に答える 1

1

テスト ケースごとにデータベース インスタンスを作成するのは時間のかかるオプションになるため、Singleton アプローチをお勧めします。また、多くのテスト ケースがある場合、単体テストの完了に時間がかかる可能性があります。継続的インテグレーションを使用している場合、ビルドと単体テストにより多くの時間がかかります。

単体テストは順次実行されるため、テスト ケースごとに個別のインスタンスは必要ありません。

于 2016-10-12T20:21:15.763 に答える