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

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();
Copy