2

我正在尝试将 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 依赖注入框架一起使用。

4

1 回答 1

1

我会推荐Singleton 方法,因为为每个测试用例创建数据库实例将是一个耗时的选项。此外,如果您有许多测试用例,则单元测试可能需要更多时间才能完成。如果您有持续集成,则构建和单元测试将花费更多时间。

由于单元测试以顺序方式运行,因此您不需要为每个测试用例提供单独的实例。

于 2016-10-12T20:21:15.763 回答