Testen nativer Konnektoren¶
Native SDK für Konnektoren verwendet Tests auf drei verschiedenen Ebenen:
Unit-Tests
Integrationstests
Anwendungstests
Diese Unit-Tests unterscheiden sich nicht von Unit-Tests für jede andere Anwendung. Teile des Systems werden nachgebildet, um die zurückgegebenen Werte leichter zu bearbeiten. Die Bibliothek connectors-native-sdk-test
, die als Bibliothek mit dem SDK gebündelt ist, bietet nützliche InMemory
-Mockups einiger Klassen, die für die Kommunikation mit Snowflake verantwortlich sind. Dadurch können Entwickler Unit-Tests in der lokalen Umgebung schreiben und ausführen, ohne eine Snowflake-Verbindung nutzen zu müssen.
Integrationstests erfordern eine Verbindung zu Snowflake und führen Abfragen auf Snowflake-Objekten aus. Allerdings sind die verwendeten Datenbankobjekte bei dieser Art von Tests eigenständig (standalone). Beachten Sie, dass einige Snowflake-Features im Kontext von Native Apps möglicherweise nicht verfügbar sind.
Anwendungstests sind Tests, die auf einer in Snowflake bereitgestellten Native App ausgeführt werden. Diese Art von Tests ist recht zeitaufwändig und kann kostspielig sein. Daher wird empfohlen, nur einige wichtige Szenarios auf diese Weise zu testen.
Insgesamt wird empfohlen, so viele Fälle wie möglich mit Unit-Tests zu testen und die Anzahl der Integrations- und Anwendungstests auf die kritischsten Pfade zu beschränken.
Bibliothek für das Testen¶
Wie bereits erwähnt, verfügt das Native SDK über eine connectors-native-sdk-test
-Bibliothek, die verschiedene nützliche Features für Tests bietet. Die wichtigsten Features sind:
kundenspezifische Assertionen
In-Memory-Implementierungen
Test-Builders
Assertionen¶
Die in der Bibliothek bereitgestellten Assertionen basieren auf den AssertJ Fluent Assertions. Alle bereitgestellten Assertionen haben eine Fabrikationsmethode, die in der Klasse NativeSdkAssertions
implementiert ist. Darüber hinaus erbt diese Klasse alle originalen AssertJ-Fabrikationsmethoden, sodass mit nur einem Import sowohl kundenspezifische als auch Basis-Assertionen verwendet werden müssen.
Die Liste der bereitgestellten Assertionen:
TestConfigAssert
IngestionProcessAssert
IngestionRunAssert
ConnectorResponseAssert
FullConnectorStatusAssert
ResourceIngestionDefinitionAssert
ResponseMapAssert
TestStateAssert
TaskAssert
TaskPropertiesAssert
VariantAssert
Mockups¶
Die in der Bibliothek verwendeten Mockups verwenden eine In-Memory-Zuordnung im Hintergrund, um die in der Datenbanktabelle gespeicherten Daten nachzubilden. Sie können wie im folgenden Beispiel verwendet werden:
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 der bereitgestellten In-Memory-Objekte:
InMemoryResourceIngestionDefinitionRepository
InMemoryIngestionProcessRepository
InMemoryAppendOnlyKeyValueTable
InMemoryDefaultKeyValueTable
InMemoryReadOnlyKeyValueTable
InMemoryConnectorErrorHelper
InMemoryTaskRef
InMemoryTaskRepository
Liste der bereitgestellten Task Reactor-In-Memory-Objekte:
InMemoryCommandsQueueRepository
InMemoryConfigRepository
InMemoryWorkSelector
InMemoryExpiredWorkSelector
InMemoryWorkItemQueue
InMemoryInstanceRegistryRepository
InMemoryWorkerQueue
InMemoryWorkerQueueManager
InMemoryWorkerRegistry
InMemoryWorkerStatusRepository
InMemoryWorkerCombinedView
InMemoryConfiguredTaskReactorExistenceVerifier
InMemoryNotConfiguredTaskReactorExistenceVerifier
InMemoryTaskReactorInstanceComponentProvider
Test-Builders¶
Test-Builders sind Hilfsobjekte, ähnlich wie Builders
, die bei der Anpassung von SDK-Komponenten verwendet werden. Sie legen jedoch alle internen Dienste offen, die Sie außer Kraft setzen können. Weitere Informationen zur Verwendung von Builders
finden Sie in der Dokumentation zu Anpassungen.
new ConfigureConnectorHandlerTestBuilder()
.withErrorHelper(mock(ConnectorErrorHelper.class))
.withInputValidator(mock(ConfigureConnectorInputValidator.class))
.withCallback(mock(ConfigureConnectorCallback.class))
.withConfigurationService(mock(ConnectorConfigurationService.class))
.withStatusService(mock(ConnectorStatusService.class))
.build();