Test de connecteurs natifs

Le SDK natif pour les connecteurs utilise des tests à trois niveaux différents :

  • tests unitaires

  • tests d’intégration

  • tests d’application

Ces tests unitaires ne sont pas différents des tests unitaires de n’importe quelle autre application. Des parties du système sont modélisées afin de pouvoir manipuler facilement les valeurs qu’elles renvoient. La bibliothèque connectors-native-sdk-test, qui, en tant que bibliothèque regroupée avec la bibliothèque SDK, fournit des maquettes InMemory utiles de certaines classes responsables de la communication avec Snowflake. Elle permet au développeur d’écrire et d’exécuter des tests unitaires dans l’environnement local sans avoir besoin d’utiliser une connexion Snowflake.

Les tests d’intégration nécessitent une connexion à Snowflake et exécutent des requêtes sur les objets de Snowflake. Cependant, les objets de base de données utilisés sont autonomes dans ce type de tests. Gardez à l’esprit que certaines fonctions de Snowflake peuvent être indisponibles dans le contexte des Native Apps.

Les tests d’application sont des tests qui s’exécutent sur une application native déployée dans Snowflake. Ces types de tests prennent beaucoup de temps et peuvent être coûteux, c’est pourquoi il est recommandé de ne tester que certains scénarios principaux de cette manière.

Globalement, la recommandation est de tester autant de cas que possible à l’aide de tests unitaires et de réduire le nombre de tests d’intégration et d’application aux chemins les plus critiques.

Bibliothèque de tests

Comme nous l’avons mentionné plus haut, le SDK natif dispose d’une bibliothèque connectors-native-sdk-test, qui offre diverses fonctions utiles dans les tests. Les principales fonctions sont les suivantes :

  • assertions personnalisées

  • implémentations en mémoire

  • constructeurs de tests

Assertions

Les assertions fournies dans la bibliothèque sont basées sur les assertions fluentes de AssertJ. Toutes les assertions fournies ont une méthode de fabrication implémentée dans la classe NativeSdkAssertions. De plus, cette classe hérite de toutes les méthodes de fabrication originales de AssertJ, de sorte qu’une seule importation est nécessaire pour utiliser à la fois les assertions personnalisées et les assertions de base.

La liste des assertions fournies :

  • TestConfigAssert

  • IngestionProcessAssert

  • IngestionRunAssert

  • ConnectorResponseAssert

  • FullConnectorStatusAssert

  • ResourceIngestionDefinitionAssert

  • ResponseMapAssert

  • TestStateAssert

  • TaskAssert

  • TaskPropertiesAssert

  • VariantAssert

Maquettes

Les mappages utilisés dans la bibliothèque utilisent une carte en mémoire sous le capot pour mapper les données stockées dans une table de base de données. Ils peuvent être utilisés comme dans l’exemple ci-dessous :

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

Liste des objets en mémoire fournis :

  • InMemoryResourceIngestionDefinitionRepository

  • InMemoryIngestionProcessRepository

  • InMemoryAppendOnlyKeyValueTable

  • InMemoryDefaultKeyValueTable

  • InMemoryReadOnlyKeyValueTable

  • InMemoryConnectorErrorHelper

  • InMemoryTaskRef

  • InMemoryTaskRepository

Liste des objets de Task Reactor fournis en mémoire :

  • InMemoryCommandsQueueRepository

  • InMemoryConfigRepository

  • InMemoryWorkSelector

  • InMemoryExpiredWorkSelector

  • InMemoryWorkItemQueue

  • InMemoryInstanceRegistryRepository

  • InMemoryWorkerQueue

  • InMemoryWorkerQueueManager

  • InMemoryWorkerRegistry

  • InMemoryWorkerStatusRepository

  • InMemoryWorkerCombinedView

  • InMemoryConfiguredTaskReactorExistenceVerifier

  • InMemoryNotConfiguredTaskReactorExistenceVerifier

  • InMemoryTaskReactorInstanceComponentProvider

Constructeurs de tests

Les constructeurs de tests sont des objets d’aide similaires à des Builders utilisés lors de la personnalisation des composants de SDK. Cependant, ils exposent tous les services internes à la surcharge. Pour plus d’informations sur l’utilisation de Builders, consultez la documentation sur la personnalisation.

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