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

137 lines
5.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!--
Copyright 1999-2026 Alibaba Group Holding Ltd.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
# Java SDK 集成测试规范
本规范定义 Nacos Java SDK 公开契约的集成测试模型。它与
[API 集成测试规范](api-integration-test-spec.md)互补: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
影响分析:
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
- 避免 `@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: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 测试。