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>

練習

  1. 完成上述測試並讓 cargo test 全綠。
  2. 寫一份簡短 README。
  3. 跑 clippy + build --release。

自我檢查

  • 單元測試通過
  • 有 README
  • 能建 release 執行檔
  • 完成一個完整的 Rust 專案!

週總結

你完成了第一個完整、可持久化的實用 CLI 工具! 這代表你已能把 Rust 應用在真實專案。