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);
var table = new InMemoryDefaultKeyValueTable();
var repository = new DefaultConfigurationRepository(table);
var connectorService = new DefaultConnectorConfigurationService(repository);
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();