SuperAPI AI 工具集

testing

测试与质量

查看项目

更新于 10-16 07:21

技能介绍

本指南介绍 Turso 项目中如何编写与运行测试,以及各测试类型的适用场景。

测试类型:.sqltest 位于 sqlite/conformance/sqlite-sqltests/,用于 SQL 兼容性,是新测试的首选;TCL .test 位于 testing/,属于旧式 SQL 兼容测试,正在被逐步淘汰;Rust 集成测试位于 tests/integration/,用于回归测试与复杂场景;模糊测试位于 tests/fuzz/,用于复杂功能与边界用例发现。TCL 测试正被 sqlite/conformance/ 下的 .sqltest 套件取代,后者可用同一批用例测试多种后端(CLI、Rust 绑定等)。

运行测试:主测试套件用 make test;单个 TCL 测试用 make test-single TEST=select.test;SQL 测试运行器用 make -C sqlite/conformance run-cli 或 cargo run -p sqltest -- run;Rust 单元/集成测试(全工作区)用 cargo test。测试期间可用 RUST_LOG=none,turso_core=trace make test 记录日志,输出到 testing/system/test.log,内容会非常冗长。

编写方式:.sqltest 示例以 @database :default: 声明,再用 test 名称 {SQL} 加 expect {预期输出} 结构;位置在 sqlite/conformance/sqlite-sqltests/.sqltest。TCL 使用 do_execsql_test_on_specific_db {:memory:} 名称 {SQL} {预期},位于 testing/.test。Rust 集成测试用 #[test] 函数与 Connection::open_in_memory()。断言推荐使用 asserting crate;crate::assertions 还提供 row! 及列、查询计划断言。

转换要求:TCL 转 .sqltest 需用运行器的 convert 命令(如 cargo run -- convert <TCL_test_path> -o <out_dir>),转换不总是准确,出现警告处需手工补齐(如手工展开 for each 循环),并用 make -C sqlite/conformance run-rust 验证、调整输出。TCL 使用硬编码数据库,.sqltest 以不同种子生成数据库,通常需改预期结果以匹配新查询输出,但避免改动测试中的 SQL 语句。

关键规则:每次功能变更都需测试;测试须在无改动时失败、有改动时通过;优先使用内存数据库(sqltest 的 :memory:、TCL 的 {:memory:});不要发明新测试格式,遵循现有模式;条件允许时先写测试。测试数据库 testing/system/testing.db 含 users 与 products 表,架构见 docs/testing.md。其他收费、平台支持等信息暂未提供。