测试原生连接器¶
连接器的原生 SDK 采用三个不同层次的测试:
单元测试
集成测试
应用程序测试
这些单元测试与任何其他应用程序的单元测试并无差别。模拟系统的某些部分,轻松操控其返回值。connectors-native-sdk-test
是与 SDK 捆绑的库,提供一些负责与 Snowflake 通信的类的有用 InMemory
模拟。这使得开发者能够在本地环境中编写和运行单元测试,无需使用任何 Snowflake 连接。
集成测试需要连接到 Snowflake 并针对 Snowflake 对象运行查询。但是,在这些类型的测试中,使用的数据库对象是独立的。请记住,某些 Snowflake 功能在 Native Apps 环境中可能不可用。
应用程序测试是在部署到 Snowflake 中的原生应用程序上运行的测试。这些类型的测试非常耗时且可能成本高昂,因此建议仅通过这种方式测试一些主要场景。
总之,建议尽可能多地使用单元测试开展测试,并尽可能地减少集成测试和应用程序测试的数量,只将其用于最关键路径的测试。
测试库¶
如上所述,Native SDK 具有 connectors-native-sdk-test
库,该库提供了在测试中有用的各种功能。主要功能有:
自定义断言
内存中实施
测试生成器
断言¶
库中提供的断言基于 AssertJ Fluent 断言 (https://assertj.github.io/doc/)。提供的所有断言都在 NativeSdkAssertions
类中实施了构造方法,此外,该类还继承了所有原始的 AssertJ 构造方法,因此只需导入一次,即可使用自定义和基础断言。
提供的断言列表:
TestConfigAssert
IngestionProcessAssert
IngestionRunAssert
ConnectorResponseAssert
FullConnectorStatusAssert
ResourceIngestionDefinitionAssert
ResponseMapAssert
TestStateAssert
TaskAssert
TaskPropertiesAssert
VariantAssert
模拟¶
库内部使用的模拟是通过后台内存映射来模拟数据库表中存储的数据。可以按照以下示例使用这些模拟:
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);
提供的内存对象列表:
InMemoryResourceIngestionDefinitionRepository
InMemoryIngestionProcessRepository
InMemoryAppendOnlyKeyValueTable
InMemoryDefaultKeyValueTable
InMemoryReadOnlyKeyValueTable
InMemoryConnectorErrorHelper
InMemoryTaskRef
InMemoryTaskRepository
提供的内存任务反应器对象列表:
InMemoryCommandsQueueRepository
InMemoryConfigRepository
InMemoryWorkSelector
InMemoryExpiredWorkSelector
InMemoryWorkItemQueue
InMemoryInstanceRegistryRepository
InMemoryWorkerQueue
InMemoryWorkerQueueManager
InMemoryWorkerRegistry
InMemoryWorkerStatusRepository
InMemoryWorkerCombinedView
InMemoryConfiguredTaskReactorExistenceVerifier
InMemoryNotConfiguredTaskReactorExistenceVerifier
InMemoryTaskReactorInstanceComponentProvider
测试生成器¶
测试生成器是类似于 Builders
的辅助函数对象,用于自定义 SDK 组件。但是,它们会公开所有内部服务以进行替换。有关使用 Builders
的更多信息,请查阅自定义文档。
new ConfigureConnectorHandlerTestBuilder()
.withErrorHelper(mock(ConnectorErrorHelper.class))
.withInputValidator(mock(ConfigureConnectorInputValidator.class))
.withCallback(mock(ConfigureConnectorCallback.class))
.withConfigurationService(mock(ConnectorConfigurationService.class))
.withStatusService(mock(ConnectorStatusService.class))
.build();