2016-10-11 2 views
2

Я пытаюсь использовать сервер DynamoDbLocal для модульных тестов. И придумал два варианта:Несколько экземпляров DynamoDbLocal для каждого модульного тестового класса или однострочного экземпляра

Определить правило класса junit, которое запускает локальный сервер перед классом и останавливает его после класса. Таким образом, он начнет и остановит сервер для каждого модульного тестового класса.

public class MyDynamoDbLocalServerRule extends ExternalResource { 

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

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

ИЛИ

Singleton экземпляра:

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, поскольку создание экземпляра базы данных для каждого тестового примера будет трудоемким. Кроме того, если у вас много тестовых примеров, для тестирования модулей потребуется больше времени. Если у вас есть непрерывная интеграция, сборка и модульный тест потребуют больше времени.

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

Смежные вопросы