35 lines
1.4 KiB
Markdown
35 lines
1.4 KiB
Markdown
# 测试
|
||
|
||
## 运行命令
|
||
|
||
```bash
|
||
./gradlew test # 纯 JVM 模块(core:model/domain/common)单元测试
|
||
./gradlew testDebugUnitTest # Android 模块单元测试(本地 JVM)
|
||
./gradlew connectedDebugAndroidTest # 仪器测试(需连接模拟器/真机)
|
||
```
|
||
|
||
## 目录与命名
|
||
|
||
- JVM 单元测试:`src/test/kotlin/`;Android 单元测试:`src/test/kotlin/`。
|
||
- 仪器测试:`src/androidTest/kotlin/`。
|
||
- 测试类命名 `<Subject>Test`;测试方法名用反引号描述意图(`fun \`invoke delegates to implementation\`()`)。
|
||
|
||
## 测什么
|
||
|
||
- **领域层优先**(`core:domain`):UseCase、纯逻辑、状态转换——用 `kotlinx-coroutines-test` 的 `runTest` + `truth` 断言,快速且稳定。
|
||
- **数据层**(`core:data`):Repository 用 fake 数据源(实现 `core:domain` 里的接口),不真打网络/数据库。
|
||
- **UI**:`@HiltViewModel` 的 `ViewModel` 用 `StateFlow` 断言状态;Composable 用 Compose UI test。
|
||
- 网络 / 数据库边界用接口隔离,用 fake/dummy 替换真实实现。
|
||
|
||
## 依赖
|
||
|
||
- `junit`:`@Test`
|
||
- `truth`:断言(更可读的 `assertThat(...)`)
|
||
- `turbine`:Flow 测试(需要时再加)
|
||
- `kotlinx-coroutines-test`:`runTest`
|
||
|
||
## 约定
|
||
|
||
- 不写"假测试"(无断言的空壳);每条测试验证一个明确行为。
|
||
- 提交 PR 时在描述里写清运行的命令与结果。
|