Dynamodb Local을 사용한 향상된 Dynamodb 및 통합 테스트

5407 단어 javaawstesting
AWS는 Java 개발자가 매핑 로직을 작성하지 않고도 DAO 구현을 쉽게 구현할 수 있도록 도와주는 새로운 Enhanced Dynamo ClientEnhanced Dynamo Client를 출시했으며 AWS는 개발자가 클라우드에 연결하지 않고 Dynamo DB와의 통합 테스트를 수행할 수 있도록 지원하는Downloadable DynamoDb을 제공합니다.

이 게시물에서는 Enhanced Dynamo Client을 사용하여 일반 DynamoDBService 클래스를 구현하는 방법과 Downloadable DynamoDb을 사용하여 단위/통합 테스트 사례를 작성하는 방법을 설명합니다.

전체 소스 코드는 다음repo에서 찾을 수 있습니다.

이 예제를 빌드하기 위해 다음 링크와 github repos를 사용했습니다.
  • baeldung
  • redskap GitRepository

  • 전제 조건


  • 자바 > 11
  • 그레이들 > 5

  • Gradle에서 향상된 클라이언트 설정



    Gradle에서 고급 클라이언트를 설정하려면 다음 종속성을 추가해야 합니다.

      implementation 'com.amazonaws:aws-java-sdk-dynamodb:1.11.434'
      implementation 'software.amazon.awssdk:dynamodb:2.17.28'
       implementation 'software.amazon.awssdk:dynamodb-enhanced:2.17.28'
    


    DynamoDb 로컬 설정



    Aws 설명서에서는 설정 단계maven build를 제공하지만 Gradle 설정은 AWS에서 제공하지 않으며 이 라이브러리는 중앙 Maven 저장소에서 사용할 수 없으므로 DynamoDb Local을 설정하려면 사용자가 aws maven 저장소를 설정해야 합니다.

    repositories {
        maven {
            name
             url "https://s3-us-west-2.amazonaws.com/dynamodb-local/release"
        }
    } 
    


    다음 종속성은 DynamoDbLocal을 Gradle 프로젝트에 추가합니다.

    testImplementation group: 'com.amazonaws', name: 'DynamoDBLocal', version: '1.11.119'
    


    https://github.com/redskap/aws-dynamodb-java-example-local-testing/blob/master/README.md에서 설정에 대한 자세한 정보를 찾을 수 있습니다. JUnit 테스트 클래스의 설정 기능 중 테스트 설정 복사AwsDynamoDbLocalTestUtils 및 호출AwsDynamoDbLocalTestUtils#initSqLite()의 일부로

    DynamoDb 도메인 POJO



    이 클래스는 Dynamo DB 스키마의 POJO 표현입니다. 저는 Getter 및 Setter 메서드의 보일러 도금을 피하기 위해 lombok을 사용했습니다. @DynamoDbBean은 dynamo db 구조를 나타내고 @DynamoDbPartitionKey는 기본 키 ID를 나타냅니다.

     @Data
    @DynamoDbBean
    public class Student {
        private String studentId;
        private String studentName;
        private String department;
        @DynamoDbPartitionKey
        @DynamoDbAttribute("studentId")
        public String getStudentId() {
            return studentId;
        }
    } 
    


    DynamoDb 서비스 구현



    이 클래스에는 전체 DAO 구현이 있습니다.
  • 테이블 만들기
  • 파티션 키를 기준으로 항목 삽입/업데이트
  • ID로 항목 가져오기

  • DynamoDBService.java

    JUnit 테스트 클래스 설정



    시작하는 동안 JUnit은 로컬 dynamo DB 인스턴스를 가동하고 다음 코드는 로컬 인스턴스에 DynamoClient 연결을 설정하는 방법을 보여줍니다.

    private static final String TABLE\_NAME = "Student";
    private static  DynamoDBProxyServer server;
    private static final String port = "8000";
    private static final String uri = "http://localhost:"+port;
    
     @BeforeEach
        public void setUpTest() throws Exception {
    
            AwsDynamoDbLocalTestUtils.initSqLite();
    
            server = ServerRunner.createServerFromCommandLineArgs(
                    new String\[\]{"-inMemory", "-port", port});
            server.start();
            client=DynamoDbClient.builder()
                    .endpointOverride(URI.create(uri))
                    .region(Region.AF\_SOUTH\_1)                .credentialsProvider(StaticCredentialsProvider.create(
                            AwsBasicCredentials.create("fakeMyKeyId","fakeSecretAccessKey")))
                    .build();
    }
    

    좋은 웹페이지 즐겨찾기