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