新闻详情

新闻详情

首页 / 资讯中心 / 详情

OpenMetadata Java SDK 测试策略详解:Mock 测试与集成测试的分层设计

发布时间:2026/9/14 11:02:34来源:尧图网络
OpenMetadata Java SDK 测试策略详解:Mock 测试与集成测试的分层设计
OpenMetadata Java SDK 测试策略详解Mock 测试与集成测试的分层设计【免费下载链接】OpenMetadataThe Open Context Layer for Data and AI , OpenMetadata is the open platform for building trusted data context and business semantics for humans, AI assistants, and agents.项目地址: https://gitcode.com/GitHub_Trending/op/OpenMetadata本文基于 OpenMetadata 仓库中 SDK 集成测试目录下的说明文档 integration/README.md 展开讲解openmetadata-sdk模块Mock 测试SDK 内 集成测试service 模块内的双层测试策略。读完后你将理解为什么 SDK 层的实体操作测试不依赖真实服务器、*.java.disabled文件的定位与迁移路径、BaseSDKTest的公共测试基座如何工作以及如何用 Maven 命令在 CI 环境中快速运行这些测试。测试分层总览Mock 测试 vs 集成测试README 文档 开篇即明确了核心原则本目录下及 SDK 内以.java.disabled结尾的文件是集成测试它们需要一个运行中的 OpenMetadata 服务器、数据库和搜索引擎才能工作因此日常构建不依赖这些测试SDK 行为验证由 Mock 测试完成。两套测试的分工如下维度Mock 测试SDK 模块内集成测试openmetadata-service 模块是否依赖运行中的服务器否全程 Mockito 模拟是真实服务器 数据库 搜索引擎验证目标SDK 是否正确转换请求/响应、错误处理与边界场景端到端工作流、真实持久化与检索行为测试基类BaseSDKTestEntityResourceTest文档指定位于 service 模块测试基础设施中运行成本秒级构建内随跑需要完整测试环境搭建这种SDK 测试验证 SDK 行为、service 测试验证服务器行为的清晰边界正是文档所强调的Clear Separation设计目标。Mock 测试用 Mockito 模拟客户端与服务 API文档指出 SDK 采用类似 Stripe Java SDK 的 Mock 测试思路用 Mockito 模拟OpenMetadataClient与各个 service API只验证 SDK 对请求和响应的转换逻辑不发起真实 HTTP 调用。当前仓库中这一策略有大量落地实现entities目录下已存在 15 个实体 Mock 测试类例如DatabaseServiceMockTest.javaTableEntityOperationsTest.javaContainerMockTest.javaGlossaryMockTest.javaDomainMockTest.javaPipelineMockTest.javaMlModelMockTest.javaUserMockTest.javaTeamMockTest.javaTestCaseMockTest.javaTopicMockTest.javaDashboardMockTest.javaClassificationMockTest.javaQueryMockTest.javaSearchIndexMockTest.java此外还有服务层与流式 API 的测试GlossaryTermRelationsMockTest.java、OntologyServicesMockTest.java、TablesFluentAPITest.java、RestoreFluentAPITest.java 等。从源码看 Mock 模式DatabaseServiceMockTest 的实现以 DatabaseServiceMockTest.java 为例其模式与文档描述完全一致——Mock掉OpenMetadataClient和DatabaseServiceService再把模拟客户端注入实体类的静态默认客户端Mock private OpenMetadataClient mockClient; Mock private DatabaseServiceService mockDatabaseServiceApi; BeforeEach void setUp() { MockitoAnnotations.openMocks(this); when(mockClient.databaseServices()).thenReturn(mockDatabaseServiceApi); org.openmetadata.sdk.entities.DatabaseService.setDefaultClient(mockClient); } Test void testCreateDatabaseService() { MysqlConnection mysqlConnection new MysqlConnection() .withHostPort(localhost:3306) .withUsername(test_user) .withDatabaseName(test_database); DatabaseConnection connection new DatabaseConnection().withConfig(mysqlConnection); CreateDatabaseService createRequest new CreateDatabaseService() .withName(test_mysql_service) .withServiceType(DatabaseServiceType.Mysql) .withConnection(connection); // ... 构造期望的 DatabaseService 返回值并 when(mockDatabaseServiceApi.create(...)) 打桩 // Act走 SDK 的实体静态方法而不是直接调用 mock DatabaseService result org.openmetadata.sdk.entities.DatabaseService.create(createRequest); // Assert既校验返回值字段也 verify 底层 API 确实被调用 assertEquals(test_mysql_service, result.getName()); verify(mockDatabaseServiceApi).create(any(CreateDatabaseService.class)); }这个测试覆盖了create/retrieve/update/delete四类操作文件共 150 行体现了文档所说的验证 SDK 正确转换请求和响应、测试错误处理与边界场景。关键点在于断言对象是SDK 静态实体 API 的入参到 mock API 的透传行为而非服务器行为。BaseSDKTestSDK 测试的公共基座部分 SDK 测试继承自 BaseSDKTest。从源码看它在BeforeEach中完成了所有公共准备工作通过MockitoAnnotations.openMocks(this)开启并跟踪 Mockito 模拟对象AfterEach中关闭构造OpenMetadataConfigbaseUrl为http://localhost:8585/api、testMode(true)、accessToken为测试邮箱、连接/读超时各 5000ms用该配置初始化OpenMetadataClient再执行OM.init(client)将客户端注入OM门面提供子类扩展点additionalSetUp()/additionalTearDown()提供测试工具方法generateTestName(prefix)前缀 UUID 前 8 位保证实体名唯一、cleanupEntity(entity)清理时捕获异常避免误杀测试、assertEntitiesEqual(...)忽略 version、updatedAt 等服务端生成字段后比较实体。值得注意的是基座中的TEST_SERVER_URL默认指向localhost:8585——即 OpenMetadata 的默认 API 端口。Mock 测试下该地址只用于配置装配不会真正发起请求这也说明为何这些测试可以在无任何外部依赖的 CI 环境运行。集成测试.java.disabled文件及其迁移路径文档将需要真实服务器的测试以.java.disabled后缀保留在 SDK 目录中封存既不参与构建又保留了测试资产。当前仓库中可以找到这样的实例OpenMetadataHttpClientTest.java.disabled——一个 HTTP 客户端层面的网络测试正属于必须连通真实服务器才有意义的范畴。文档给出了把这类测试正式启用到openmetadata-service模块的三步操作原文档内容完整继承将.java.disabled文件移动到openmetadata-service/src/test/java/org/openmetadata/service/resources/改为继承EntityResourceTest而不是BaseSDKTest使用openmetadata-service提供的测试基础设施。迁移后测试获得的能力包括以EntityResourceTest为基类接入 service 模块的完整测试基础设施、可针对真实数据库和搜索引擎执行、可测试端到端工作流。由于 service 模块的测试工程规模较大openmetadata-service/src/test/java下含八百余个测试文件这类集成测试天然适合放在那里统一运行。需要说明的是这一步是按需迁移——只有当某项行为确实需要真实服务器语义如持久化、检索、鉴权链路时才值得迁移纯粹验证 SDK 请求/响应转换的测试应继续留在 Mock 层。运行 Mock 测试文档给出的运行方式如下在openmetadata-sdk模块下执行# 运行 SDK 全部 Mock 测试 mvn test # 运行单个 Mock 测试 mvn test -DtestTableMockTest由于仓库根目录同样是 Maven 聚合工程根 pom.xml 下挂载 openmetadata-sdk/pom.xml 等模块也可以从仓库根目录用-pl参数指定模块运行例如针对上文示例类mvn test -pl openmetadata-sdk -DtestDatabaseServiceMockTest适用前提本地已具备 Java 与 Maven 构建环境且已能解析各模块依赖如按仓库根目录构建说明先完成整体构建。这一策略的收益文档最后总结了五点收益结合仓库现状可以逐条对应验证快速反馈Fast FeedbackMock 测试无外部依赖、秒级完成随mvn test进入每次构建可靠性Reliable不经过网络与真实服务器消除了因环境不稳定导致的 flaky 失败完整覆盖Complete Coverage错误分支如 BaseSDKTest 中cleanupEntity对清理异常的容错设计所暗示的思路与边界条件在 Mock 下更容易构造和断言CI/CD 友好CI/CD Friendly任何环境零搭建即可运行职责清晰Clear SeparationSDK 测试只回答SDK 是否正确service 模块集成测试只回答服务器是否端到端正确。小结OpenMetadata SDK 的测试组织可以概括为一句话转换逻辑交给 Mock端到端交给 service 模块。日常开发中修改 SDK 的实体/服务类后直接运行模块内 Mock 测试即可获得秒级反馈当需要验证真实服务器链路时再按文档的三步迁移法将.java.disabled测试升级为基于EntityResourceTest的集成测试。相关入口文件集成测试说明文档、SDK 测试基座 BaseSDKTest、Mock 测试示例 DatabaseServiceMockTest。【免费下载链接】OpenMetadataThe Open Context Layer for Data and AI , OpenMetadata is the open platform for building trusted data context and business semantics for humans, AI assistants, and agents.项目地址: https://gitcode.com/GitHub_Trending/op/OpenMetadata创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

Docker实战指南:从容器核心概念到MySQL、Redis与Compose部署全流程 2026/9/14 11:47:49

Docker实战指南:从容器核心概念到MySQL、Redis与Compose部署全流程

最近总被人问同一类问题:同事发过来的镜像怎么跑起来?MySQL 怎么用 Docker 装才不容易丢数据?Redis 主从怎么配?还有人在 Windows 上报错,提示 virtualization support not detected ,一搜一大堆结果&…

阅读更多 →
[单片机] x_strtok,安全分割函数 16进制整数转字符串 2026/9/14 11:47:49

[单片机] x_strtok,安全分割函数 16进制整数转字符串

引言 在嵌入式开发与底层 C 语言编程中,字符串处理和进制转换是两项非常基础却又高频使用的技能。无论是解析串口指令、处理通信协议报文,还是将二进制数据以可读形式输出,都离不开这两类操作。本文将从基础概念出发,先深入剖析 …

阅读更多 →
嵌入式 C 语言标识符缩写规范:从命名到实战 2026/9/14 11:47:49

嵌入式 C 语言标识符缩写规范:从命名到实战

1. 前言 在嵌入式 C 语言开发中,标识符命名是代码可读性与可维护性的基石。由于嵌入式系统资源受限,开发者常倾向于使用缩写来缩短变量名和函数名,但过度或随意的缩写反而会降低代码的可读性,增加团队协作的沟通成本。本文整理了一…

阅读更多 →
嵌入式系统代码维护的 10 个实用技巧 2026/9/14 11:47:49

嵌入式系统代码维护的 10 个实用技巧

TL;DR:本文面向嵌入式开发者,总结了 10 条代码维护技巧——避免汇编、防止注释蠕变、不过早优化、简化 ISR、保留调试代码、编写硬件包装器、合理分解功能、重视文档、避免过度聪明、集中管理定义。核心目标是让代码在数十年后依然可读、可维护、可移植。…

阅读更多 →
keep告警管理5分钟上手指南:降噪+自动化闭环 2026/9/14 11:47:49

keep告警管理5分钟上手指南:降噪+自动化闭环

keep告警管理5分钟上手指南:降噪自动化闭环 【免费下载链接】keep The open-source AIOps and alert management platform 项目地址: https://gitcode.com/GitHub_Trending/kee/keep 一次数据库慢查询,30分钟里涌进值班群127条告警,而…

阅读更多 →
PyArrow 读写 Parquet 文件时如何只读取部分列并控制写入选项 2026/9/14 11:44:48

PyArrow 读写 Parquet 文件时如何只读取部分列并控制写入选项

PyArrow 读写 Parquet 文件时如何只读取部分列并控制写入选项 【免费下载链接】arrow Apache Arrow is the universal columnar format and multi-language toolbox for fast data interchange and in-memory analytics 项目地址: https://gitcode.com/GitHub_Trending/arrow…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞