Files
alibaba--nacos/specs/zh-cn/testing/java-sdk-integration-test-spec.md
2026-07-13 12:37:52 +08:00

5.6 KiB
Raw Permalink Blame History

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 客户端。

本规范适用于以下变更:

  • ConfigServiceNamingServiceAiServiceA2aServiceLockService 以及 maintainer-client 对应公开 interface
  • NacosFactoryConfigFactoryNamingFactoryAiFactoryNacosLockFactory 等公开 factory
  • SDK 方法返回的公开 request、response 或领域模型;
  • listener、subscription、本地缓存、redo、factory 初始化、shutdown 或异常映射;
  • SDK 配置项和默认值行为。

单元测试仍然需要覆盖隔离实现分支,但不能替代对外可见 SDK 行为的 Java SDK IT。

2. SDK 变更规则

在实现 Java SDK 契约新增、修改、删除或废弃前,变更负责人必须完成 SDK IT 影响分析:

  1. 识别受影响的 SDK interface、factory、模型或 listener 路径。
  2. 阅读公开 API、实现、校验器、传输映射、响应组装、异常映射、生命周期代码 和对应 SDK/client 规范。
  3. 形成场景矩阵,覆盖 factory/生命周期行为、预期功能、边界/校验行为、 listener 或 subscription 行为,以及异常/错误处理。
  4. 在同一个变更集中新增、更新或移除 test/java-sdk-test 用例。
  5. 更新 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.config
  • com.alibaba.nacos.test.sdk.naming
  • com.alibaba.nacos.test.sdk.ai
  • com.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
  • 避免 @SpringBootTestSpringExtension,也不要在测试类中启动 Nacos
  • 读取 nacos.hostnacos.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:check
  • mvn -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 测试。