LocalStack提供了一个易于使用的测试/模拟框架,用于开发云应用程序。它在您的本地计算机上启动一个测试环境,提供与真实的AWS云环境相同的功能和API。
它模拟了几个aws服务,包括dynamodb。例如:
1)在我的pom.xml中的依赖项下:
<dependency>
<groupId>cloud.localstack</groupId>
<artifactId>localstack-utils</artifactId>
<version>0.1.19</version>
<scope>test</scope>
</dependency>
2)将以下标头添加到您的单元测试类中:
@RunWith(LocalstackDockerTestRunner.class)
@LocalstackDockerProperties(randomizePorts = true, services = {"dynamodb"})
3) 确保您的应用程序指向本地堆栈网址,例如,Dynamo将在http://localhost:4569
等待您。更多信息此处。
1)在pom.xml文件的dependencies部分:
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>DynamoDBLocal</artifactId>
<version>1.11.477</version>
<scope>test</scope>
</dependency>
2)然后在我们的单元测试中:
private AmazonDynamoDB amazonDynamoDB;
@Before
public void setup() throws Exception {
amazonDynamoDB = DynamoDBEmbedded.create().amazonDynamoDB();//dynamoDB.getAmazonDynamoDB();
amazonDynamoDB.createTable(new CreateTableRequest()
.withTableName(TABLE_NAME)
.withKeySchema(new KeySchemaElement().withAttributeName(ITEM).withKeyType(KeyType.HASH))
.withAttributeDefinitions(
new AttributeDefinition().withAttributeName(ITEM).withAttributeType(ScalarAttributeType.S))
.withProvisionedThroughput(new ProvisionedThroughput(10L, 15L))
);
}
确保我们的DAO使用这个amazonDynamoDB
实例。
的东西,然后是
AmazonDynamoDBClientBuilder.standard().withEndpointConfiguration(endpointConfiguration)`。 - Alexander Radchenkosqlite4java
)。docker run -p 8000:8000 amazon/dynamodb-local
test:
stage: test
image: openjdk:8-alpine
services:
- name: amazon/dynamodb-local
alias: dynamodb-local
script:
- DYNAMODB_LOCAL_URL=http://dynamodb-local:8000 ./gradlew clean test
definitions:
services:
dynamodb-local:
image: amazon/dynamodb-local
…
step:
name: test
image:
name: openjdk:8-alpine
services:
- dynamodb-local
script:
- DYNAMODB_LOCAL_URL=http://localhost:8000 ./gradlew clean test
启动容器后,您可以创建指向该容器的客户端:
private AmazonDynamoDB createAmazonDynamoDB(final DynamoDBLocal configuration) {
return AmazonDynamoDBClientBuilder
.standard()
.withEndpointConfiguration(
new AwsClientBuilder.EndpointConfiguration(
"http://localhost:8000",
Regions.US_EAST_1.getName()
)
)
.withCredentials(
new AWSStaticCredentialsProvider(
// DynamoDB Local works with any non-null credentials
new BasicAWSCredentials("", "")
)
)
.build();
}
如果您正在使用JUnit 5,使用 AWS的JUnit 5扩展可以是一个好主意,它将在测试中注入客户端(是的,我在自我推销):
Add a dependency on me.madhead.aws-junit5:dynamo-v1
(dynamo-v2
for AWS Java SDK v2.x client)
pom.xml:
<dependency>
<groupId>me.madhead.aws-junit5</groupId>
<artifactId>dynamo-v1</artifactId>
<version>6.0.3</version>
<scope>test</scope>
</dependency>
build.gradle
dependencies {
testImplementation("me.madhead.aws-junit5:dynamo-v1:6.0.3")
}
Use the extension in your tests:
@ExtendWith(DynamoDB.class)
class Test {
@AWSClient(
endpoint = Endpoint.class
)
private AmazonDynamoDB client;
@Test
void test() {
client.listTables();
}
}
阅读完整的用户指南,它真的很简短。
docker run
/ docker stop
即可。 - madhead