네이티브 커넥터 테스트하기

커넥터용 네이티브 SDK는 다음 3가지 수준의 테스트를 사용합니다.

  • 단위 테스트

  • 통합 테스트

  • 애플리케이션 테스트

이러한 단위 테스트는 다른 애플리케이션의 단위 테스트와 다르지 않습니다. 시스템의 일부는 반환된 값을 쉽게 조작할 수 있도록 모방되었습니다. connectors-native-sdk-test 라이브러리는 SDK와 함께 번들로 제공되는 라이브러리로, Snowflake와의 통신을 담당하는 일부 클래스의 유용한 InMemory 목업을 제공합니다. 이를 통해 개발자는 Snowflake 연결을 사용하지 않고도 로컬 환경에서 단위 테스트를 작성하고 실행할 수 있습니다.

통합 테스트를 수행하려면 Snowflake에 연결하고 Snowflake 오브젝트에 대한 쿼리를 실행해야 합니다. 그러나 이러한 종류의 테스트에서는 사용된 데이터베이스 오브젝트가 독립 실행형입니다. 일부 Snowflake 기능은 Native Apps에서는 사용할 수 없을 수도 있습니다.

애플리케이션 테스트는 Snowflake에 배포된 Native App에서 실행되는 테스트입니다. 이런 종류의 테스트는 시간이 많이 걸리고 비용도 많이 소요될 수 있으므로, 이 방법으로는 몇 가지 주요 시나리오만 테스트하는 것이 좋습니다.

전반적으로, 단위 테스트를 사용하여 최대한 많은 사례를 테스트하고 가장 중요한 경로에 대한 통합 및 애플리케이션 테스트의 수를 최소화하는 것이 좋습니다.

라이브러리 테스트하기

위의 설명과 같이, 네이티브 SDK에는 테스트에 유용한 다양한 기능을 제공하는 connectors-native-sdk-test 라이브러리가 있습니다. 주요 기능은 다음과 같습니다.

  • 사용자 지정 어설션

  • 메모리 내 구현

  • 테스트 빌더

어설션

라이브러리에서 제공되는 어설션은 AssertJ Fluent Assertions 를 기반으로 합니다. 제공되는 모든 어설션에는 NativeSdkAssertions 클래스 내부에 구현된 패브리케이션 메서드가 있으며, 또한 이 클래스는 원래의 모든 AssertJ 패브리케이션 메서드를 상속하므로 사용자 지정 및 기본 어설션을 모두 사용하려면 한 번만 가져오면 됩니다.

제공되는 어설션 목록:

  • TestConfigAssert

  • IngestionProcessAssert

  • IngestionRunAssert

  • ConnectorResponseAssert

  • FullConnectorStatusAssert

  • ResourceIngestionDefinitionAssert

  • ResponseMapAssert

  • TestStateAssert

  • TaskAssert

  • TaskPropertiesAssert

  • VariantAssert

목업

라이브러리 내부에서 사용되는 목업은 내부에서 인메모리 맵을 사용하여 데이터베이스 테이블에 저장된 데이터를 모방합니다. 아래 예제와 같이 사용할 수 있습니다.

var customResourceRepository = new InMemoryDefaultResourceIngestionDefinitionRepository();
var key = "test_key";

var resource = createResource(key);
customResourceRepository.save(resource);

var result = customResourceRepository.fetch(key);
Copy
var table = new InMemoryDefaultKeyValueTable();
var repository = new DefaultConfigurationRepository(table);
var connectorService = new DefaultConnectorConfigurationService(repository);
Copy

제공되는 인메모리 오브젝트 목록:

  • InMemoryResourceIngestionDefinitionRepository

  • InMemoryIngestionProcessRepository

  • InMemoryAppendOnlyKeyValueTable

  • InMemoryDefaultKeyValueTable

  • InMemoryReadOnlyKeyValueTable

  • InMemoryConnectorErrorHelper

  • InMemoryTaskRef

  • InMemoryTaskRepository

제공되는 인메모리 Task Reactor 오브젝트 목록:

  • InMemoryCommandsQueueRepository

  • InMemoryConfigRepository

  • InMemoryWorkSelector

  • InMemoryExpiredWorkSelector

  • InMemoryWorkItemQueue

  • InMemoryInstanceRegistryRepository

  • InMemoryWorkerQueue

  • InMemoryWorkerQueueManager

  • InMemoryWorkerRegistry

  • InMemoryWorkerStatusRepository

  • InMemoryWorkerCombinedView

  • InMemoryConfiguredTaskReactorExistenceVerifier

  • InMemoryNotConfiguredTaskReactorExistenceVerifier

  • InMemoryTaskReactorInstanceComponentProvider

테스트 빌더

테스트 빌더는 SDK 구성 요소를 사용자 지정할 때 사용되는 Builders 와 유사한 도우미 오브젝트입니다. 하지만 테스트 빌더는 모든 내부 서비스를 재정의에 노출시킵니다. Builders 사용에 대한 자세한 내용은 사용자 지정 설명서를 확인하십시오.

new ConfigureConnectorHandlerTestBuilder()
                .withErrorHelper(mock(ConnectorErrorHelper.class))
                .withInputValidator(mock(ConfigureConnectorInputValidator.class))
                .withCallback(mock(ConfigureConnectorCallback.class))
                .withConfigurationService(mock(ConnectorConfigurationService.class))
                .withStatusService(mock(ConnectorStatusService.class))
                .build();
Copy