Teste de conectores nativos

Native SDK para conectores usa testes em 3 níveis diferentes:

  • testes de unidade

  • testes de integração

  • testes de aplicativo

Esses testes de unidade não são diferentes dos testes de unidade de qualquer outro aplicativo. Partes do sistema são simuladas para manipular facilmente seus valores retornados. A biblioteca connectors-native-sdk-test, que como uma biblioteca agrupada com o SDK fornece mockups úteis InMemory de algumas classes responsáveis pela comunicação com o Snowflake. Ele permite que o desenvolvedor escreva e execute testes de unidade no ambiente local sem a necessidade de usar nenhuma conexão Snowflake.

Os testes de integração exigem uma conexão com o Snowflake e executam consultas em objetos do Snowflake. No entanto, os objetos de banco de dados usados são independentes nesses tipos de testes. Tenha em mente que alguns recursos do Snowflake podem não estar disponíveis no contexto de Native Apps.

Testes de aplicativos são testes executados em um aplicativo nativo implantado no Snowflake. Esses tipos de testes consomem muito tempo e podem ser caros, então a recomendação é testar apenas alguns cenários principais dessa maneira.

No geral, a recomendação é testar o máximo de casos possível usando testes de unidade e minimizar o número de testes de integração e aplicativo para os caminhos mais críticos.

Biblioteca para testes

Como mencionado acima, o Native SDK tem uma biblioteca connectors-native-sdk-test, que fornece vários recursos úteis em testes. As principais características são:

  • asserções personalizadas

  • implementações na memória

  • construtores de teste

Asserções

As asserções fornecidas na biblioteca são baseadas em asserções fluentes AssertJ. Todas as asserções fornecidas têm um método de fabricação implementado dentro da classe NativeSdkAssertions, além disso, esta classe herda todos os métodos de fabricação AssertJ originais, portanto, apenas uma importação é necessária para usar asserções personalizadas e básicas.

A lista de asserções fornecidas:

  • TestConfigAssert

  • IngestionProcessAssert

  • IngestionRunAssert

  • ConnectorResponseAssert

  • FullConnectorStatusAssert

  • ResourceIngestionDefinitionAssert

  • ResponseMapAssert

  • TestStateAssert

  • TaskAssert

  • TaskPropertiesAssert

  • VariantAssert

Simulações

As simulações usadas dentro da biblioteca usam um mapa na memória para simular os dados armazenados dentro da tabela do banco de dados. Eles podem ser usados como no exemplo abaixo:

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

Lista de objetos fornecidos na memória:

  • InMemoryResourceIngestionDefinitionRepository

  • InMemoryIngestionProcessRepository

  • InMemoryAppendOnlyKeyValueTable

  • InMemoryDefaultKeyValueTable

  • InMemoryReadOnlyKeyValueTable

  • InMemoryConnectorErrorHelper

  • InMemoryTaskRef

  • InMemoryTaskRepository

Lista de objetos do reator de tarefas fornecidos na memória:

  • InMemoryCommandsQueueRepository

  • InMemoryConfigRepository

  • InMemoryWorkSelector

  • InMemoryExpiredWorkSelector

  • InMemoryWorkItemQueue

  • InMemoryInstanceRegistryRepository

  • InMemoryWorkerQueue

  • InMemoryWorkerQueueManager

  • InMemoryWorkerRegistry

  • InMemoryWorkerStatusRepository

  • InMemoryWorkerCombinedView

  • InMemoryConfiguredTaskReactorExistenceVerifier

  • InMemoryNotConfiguredTaskReactorExistenceVerifier

  • InMemoryTaskReactorInstanceComponentProvider

Construtores de teste

Os construtores de teste são objetos auxiliares semelhantes ao Builders usado ao personalizar componentes SDK. No entanto, eles expõem todos os serviços internos à substituição. Para obter mais informações sobre o uso de Builders, verifique a documentação de personalização.

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