test_storage.py 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. """
  2. Storage类的单元测试
  3. """
  4. import os
  5. import json
  6. import pytest
  7. from todo.todo import Todo
  8. from todo.storage import Storage
  9. @pytest.fixture
  10. def temp_storage(tmp_path):
  11. """创建临时存储文件"""
  12. filepath = tmp_path / "test_todos.json"
  13. return Storage(str(filepath))
  14. class TestStorage:
  15. """Storage类测试"""
  16. def test_create_storage(self, temp_storage):
  17. """测试创建Storage对象"""
  18. assert temp_storage.filepath.endswith("test_todos.json")
  19. def test_save_and_load(self, temp_storage):
  20. """测试保存和加载"""
  21. todo = Todo()
  22. todo.add("任务1")
  23. todo.add("任务2")
  24. todo.complete(1)
  25. # 保存
  26. assert temp_storage.save(todo) is True
  27. assert temp_storage.exists() is True
  28. # 加载
  29. loaded_todo = temp_storage.load()
  30. assert len(loaded_todo.items) == 2
  31. assert loaded_todo.items[0].title == "任务1"
  32. assert loaded_todo.items[0].completed is True
  33. assert loaded_todo.items[1].title == "任务2"
  34. assert loaded_todo.next_id == 3
  35. def test_load_nonexistent_file(self, temp_storage):
  36. """测试加载不存在的文件"""
  37. todo = temp_storage.load()
  38. assert len(todo.items) == 0
  39. assert todo.next_id == 1
  40. def test_load_invalid_json(self, temp_storage):
  41. """测试加载无效的JSON文件"""
  42. # 创建无效的JSON文件
  43. with open(temp_storage.filepath, 'w') as f:
  44. f.write("invalid json content")
  45. todo = temp_storage.load()
  46. assert len(todo.items) == 0
  47. assert todo.next_id == 1
  48. def test_exists(self, temp_storage):
  49. """测试文件存在性检查"""
  50. assert temp_storage.exists() is False
  51. todo = Todo()
  52. temp_storage.save(todo)
  53. assert temp_storage.exists() is True
  54. def test_delete(self, temp_storage):
  55. """测试删除存储文件"""
  56. todo = Todo()
  57. temp_storage.save(todo)
  58. assert temp_storage.exists() is True
  59. assert temp_storage.delete() is True
  60. assert temp_storage.exists() is False
  61. def test_delete_nonexistent_file(self, temp_storage):
  62. """测试删除不存在的文件"""
  63. assert temp_storage.delete() is True
  64. def test_save_creates_valid_json(self, temp_storage):
  65. """测试保存的JSON格式正确"""
  66. todo = Todo()
  67. todo.add("任务1")
  68. temp_storage.save(todo)
  69. with open(temp_storage.filepath, 'r', encoding='utf-8') as f:
  70. data = json.load(f)
  71. assert "todos" in data
  72. assert "next_id" in data
  73. assert isinstance(data["todos"], list)
  74. assert isinstance(data["next_id"], int)
  75. def test_save_preserves_chinese_characters(self, temp_storage):
  76. """测试保存中文字符"""
  77. todo = Todo()
  78. todo.add("买菜做饭")
  79. temp_storage.save(todo)
  80. loaded_todo = temp_storage.load()
  81. assert loaded_todo.items[0].title == "买菜做饭"