Day 7:測試、文件與打包 —— 專案完成
學習目標
- 為 store 寫單元測試
- 撰寫 README
- 建置 release 可執行檔
今日重點
單元測試(#[cfg(test)])
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn add_increments_id() {
let mut store = TaskStore::new();
store.add("first".to_string());
store.add("second".to_string());
assert_eq!(store.tasks.len(), 2);
assert_eq!(store.tasks[1].id, 2);
}
#[test]
fn mark_done_works() {
let mut store = TaskStore::new();
store.add("task".to_string());
assert!(store.mark_done(1).is_some());
assert!(store.tasks[0].done);
}
#[test]
fn mark_done_missing_returns_none() {
let mut store = TaskStore::new();
assert!(store.mark_done(99).is_none());
}
#[test]
fn save_then_load_roundtrip() {
let mut store = TaskStore::new();
store.add("persisted".to_string());
let path = "test.json";
store.save(path).unwrap();
let loaded = TaskStore::load(path);
assert_eq!(loaded.tasks.len(), 1);
assert_eq!(loaded.tasks[0].title, "persisted");
fs::remove_file(path).ok();
}
}
用
cargo test執行。
打包 release
cargo fmt
cargo clippy
cargo test
cargo build --release
# 執行檔在 target/release/todo-cli(.exe)
README 範例
# todo-cli
CLI 任務管理工具(Rust)
## 使用
- todo add "標題"
- todo list
- todo done <id>
- todo remove <id>
練習
- 完成上述測試並讓 cargo test 全綠。
- 寫一份簡短 README。
- 跑 clippy + build --release。
自我檢查
- 單元測試通過
- 有 README
- 能建 release 執行檔
- 完成一個完整的 Rust 專案!
週總結
你完成了第一個完整、可持久化的實用 CLI 工具! 這代表你已能把 Rust 應用在真實專案。