Как использовать модуль Dynalite Testcontainers в тестах JUnit 5 и SpringBoot 2.3.1

Я не могу понять, как использовать модуль Dynalite Testcontainers в тесте JUnit 5, чтобы иметь возможность протестировать Amazon DynamoDB, - документация действительно слишком лаконична и минималистична.

Поэтому я добавил следующие зависимости в pom.xml:

<dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter</artifactId>
            <version>${junit.jupiter.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.amazonaws</groupId>
            <artifactId>aws-java-sdk-dynamodb</artifactId>
            <version>1.11.842</version>
        </dependency>
        <dependency>
            <groupId>org.testcontainers</groupId>
            <artifactId>testcontainers</artifactId>
            <version>${testcontainers.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.testcontainers</groupId>
            <artifactId>dynalite</artifactId>
            <version>${testcontainers.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.testcontainers</groupId>
            <artifactId>junit-jupiter</artifactId>
            <version>${testcontainers.version}</version>
            <scope>test</scope>
        </dependency>

где testcontainers.version является 1.14.3 а также junit.jupiter.version является 5.6.2. Затем я создал тестовый класс службы следующим образом:

@Testcontainers
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
class DailyPowerConsumptionServiceTest {

    @Container
    public static DynaliteContainer dynaliteContainer = new DynaliteContainer();

@TestConfiguration
    static class UserServiceImplTestContextConfiguration {

        @Bean
        DailyPowerConsumptionService dailyPowerConsumptionService() {
            return new DailyPowerConsumptionServiceImpl();
        }
    }

    @Autowired
    private DailyPowerConsumptionRepository repository;

    @Autowired
    private DailyPowerConsumptionService dailyPowerConsumptionService;

    @BeforeClass
    public void setUp() {
        AmazonDynamoDB amazonDynamoDB = dynaliteContainer.getClient();
        DynamoDBMapper dynamoDBMapper = new DynamoDBMapper(amazonDynamoDB);
        CreateTableRequest tableRequest = dynamoDBMapper
                .generateCreateTableRequest(DailyPowerConsumption.class);
        tableRequest.setProvisionedThroughput(
                new ProvisionedThroughput(1L, 1L));
        amazonDynamoDB.createTable(tableRequest);

        dynamoDBMapper.batchDelete(repository.findAll());
    }

    @Test
    void findDailyPowerConsumptions() {
        assertTrue(dynaliteContainer.isRunning());
    }
}

При запуске тестов работает, ура!

Но когда я пытаюсь создать запись и протестировать службу следующим образом:

    @Test
    void findDailyPowerConsumptions() throws SQLException {
        //assertTrue(dynaliteContainer.isRunning());
        DailyPowerConsumption dailyPowerConsumption = new DailyPowerConsumption(1, 10, "2020-08-10.000", "DEV1", 10.0,
        10.0, 220.0, 10.0, 1.0,1.0, 1.0);

        repository.save(dailyPowerConsumption);

        List<DailyPowerConsumption> dailyPowerConsumptionsList = dailyPowerConsumptionService.findDailyPowerConsumptions("EX1", "1", "10");
        assertThat(dailyPowerConsumptionsList).isNotEmpty();
    }

это не удается:

com.amazonaws.services.dynamodbv2.model.AmazonDynamoDBException: The provided key element does not match the schema (Service: AmazonDynamoDBv2; Status Code: 400; Error Code: ValidationException; Request ID: 71B6U0QKNDARKLUEBQQ99B6DD7VV4KQNSO5AEMVJF66Q9ASUAAJG; Proxy: null)

Что мне здесь не хватает? Я проверил сопоставленные значения, вроде все в порядке.

0 ответов

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