5.6 KiB
Java SDK 集成测试规范
本规范定义 Nacos Java SDK 公开契约的集成测试模型。它与 API 集成测试规范互补:HTTP API IT 验证部署后 的 HTTP 契约,Java SDK IT 验证应用侧看到的类型化 Java SDK 行为。
Java SDK IT 的目标是 SDK 场景覆盖,不是行覆盖率或分支覆盖率。
1. 范围
Java SDK IT 的主要位置是 test/java-sdk-test。该模块假设单机 Nacos 服务已经
启动,并以外部应用身份创建真实 Java SDK 客户端。
本规范适用于以下变更:
ConfigService、NamingService、AiService、A2aService、LockService以及 maintainer-client 对应公开 interface;NacosFactory、ConfigFactory、NamingFactory、AiFactory、NacosLockFactory等公开 factory;- SDK 方法返回的公开 request、response 或领域模型;
- listener、subscription、本地缓存、redo、factory 初始化、shutdown 或异常映射;
- SDK 配置项和默认值行为。
单元测试仍然需要覆盖隔离实现分支,但不能替代对外可见 SDK 行为的 Java SDK IT。
2. SDK 变更规则
在实现 Java SDK 契约新增、修改、删除或废弃前,变更负责人必须完成 SDK IT 影响分析:
- 识别受影响的 SDK interface、factory、模型或 listener 路径。
- 阅读公开 API、实现、校验器、传输映射、响应组装、异常映射、生命周期代码 和对应 SDK/client 规范。
- 形成场景矩阵,覆盖 factory/生命周期行为、预期功能、边界/校验行为、 listener 或 subscription 行为,以及异常/错误处理。
- 在同一个变更集中新增、更新或移除
test/java-sdk-test用例。 - 更新
test/java-sdk-test/JAVA_SDK_IT_COVERAGE.md。
如果完整成功路径在单机 IT 中难以实际执行,测试仍必须覆盖 SDK 参数校验、 本地边界行为、受控异常,以及低风险可观测的服务端交互。未覆盖路径和原因 必须记录在文档中。
3. 必须覆盖的场景组
每个 Java SDK IT 都应覆盖以下可观测场景组。
3.1 Factory 和生命周期
验证 SDK 可以通过公开 factory 使用真实 properties 创建,能正确处理 server address 和 namespace 默认值,并能通过公开 shutdown 方法释放资源。
3.2 预期功能
验证 SDK 方法完成承诺的远程或本地行为。优先使用发布后查询、注册后查询、 订阅后回调、加锁后解锁、发布后加载、删除后确认不存在等流程。
断言必须检查类型化 SDK 返回值、模型字段、回调和远程副作用,不能只判断没有 抛出异常。
3.3 边界和校验
覆盖必填参数、可选默认值、非法枚举或类型、namespace/group 默认值、超时行为、 异常模型对象、listener 身份要求、重复或幂等调用,以及资源不存在行为。
3.4 异常和错误处理
验证 SDK 可见失败会产生受控 NacosException 或文档化返回值。测试应捕捉非法
输入、资源不存在、远端失败或非法生命周期使用变成非预期运行时异常的回归。
3.5 Listener 和订阅行为
对于 listener API,应验证适用场景下的初始查询行为、可观测变更触发回调、 unsubscribe/remove 行为和清理逻辑。等待必须有边界,并提供清晰断言信息。
4. 测试组织
Java SDK IT 应放在:
com.alibaba.nacos.test.sdk.configcom.alibaba.nacos.test.sdk.namingcom.alibaba.nacos.test.sdk.aicom.alibaba.nacos.test.sdk.lock- 新增 maintainer SDK IT 时使用
com.alibaba.nacos.test.sdk.maintainer.<domain>
建议一个公开 SDK interface 或一组强关联 API family 对应一个测试类。共享的客户端 构造、清理、有界等待、随机资源名和 shutdown 逻辑应抽象到基础类。
5. 运行规则
Java SDK IT 必须:
- 使用 JUnit 5 和 Failsafe;
- 避免
@SpringBootTest、SpringExtension,也不要在测试类中启动 Nacos; - 读取
nacos.host和nacos.port,默认127.0.0.1:8848; - 通过公开 factory 创建真实 SDK 客户端;
- 生成隔离的资源名称;
- 清理创建的 config、naming、AI 或 lock 资源;
- 即使断言失败,也要关闭每个 SDK 实例;
- 对异步服务端效果使用有界重试。
6. 场景文档
每个 SDK IT 类都必须包含简洁的 Scenario coverage Javadoc;当矩阵较大时,
应更新 test/java-sdk-test/JAVA_SDK_IT_COVERAGE.md。文档必须说明验证了什么,
以及为什么有分支被有意跳过。
7. 验证
Java SDK IT 变更需要运行:
mvn -pl test/java-sdk-test spotless:checkmvn -pl test/java-sdk-test -DskipTests test-compile
当单机 Nacos 服务可用时,应运行相关 Failsafe 选择,或执行
mvn -pl test/java-sdk-test -Pjava-sdk-integration-test -DskipTests=false verify。
Java SDK IT 必须使用独立的 java-sdk-integration-test Maven profile。通用
integration-test profile 保留给 HTTP API IT 工作流,不能意外运行依赖 SDK
gRPC 连接就绪状态或可选服务端能力的 SDK 测试。