Несколько экземпляров DynamoDbLocal для каждого класса модульного теста или экземпляра синглтона

Я пытаюсь использовать сервер DynamoDbLocal для тестовых случаев. И придумал два варианта,

Либо определите правило класса 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.

1 ответ

Я бы порекомендовал подход Singleton, так как создание экземпляра базы данных для каждого теста будет трудоемким вариантом. Кроме того, если у вас много тестовых случаев, модульное тестирование может занять больше времени для завершения. Если у вас есть непрерывная интеграция, сборка и модульное тестирование займет больше времени.

Поскольку модульные тесты выполняются последовательно, вам не нужен отдельный экземпляр для каждого теста.

Другие вопросы по тегам