"""缓存管理器单元测试."""
import pytest
import time
from src.cache_manager import CacheManager, get_cache_manager
class TestCacheManager:
"""缓存管理器测试类."""
def test_initialization(self):
"""测试初始化."""
cache = CacheManager(default_ttl=300)
assert cache.default_ttl == 300
assert len(cache._cache) == 0
def test_set_and_get(self, cache_manager):
"""测试设置和获取缓存."""
cache_manager.set("test_key", "test_value", ttl=60)
value = cache_manager.get("test_key")
assert value == "test_value"
def test_get_nonexistent(self, cache_manager):
"""测试获取不存在的键."""
value = cache_manager.get("nonexistent")
assert value is None
def test_expiration(self, cache_manager):
"""测试缓存过期."""
cache_manager.set("expire_key", "value", ttl=1)
time.sleep(1.1) # 等待过期
value = cache_manager.get("expire_key")
assert value is None
def test_delete(self, cache_manager):
"""测试删除缓存."""
cache_manager.set("delete_key", "value")
cache_manager.delete("delete_key")
value = cache_manager.get("delete_key")
assert value is None
def test_clear(self, cache_manager):
"""测试清空缓存."""
cache_manager.set("key1", "value1")
cache_manager.set("key2", "value2")
cache_manager.clear()
assert len(cache_manager._cache) == 0
def test_invalidate_pattern(self, cache_manager):
"""测试模式匹配删除."""
cache_manager.set("prefix_key1", "value1")
cache_manager.set("prefix_key2", "value2")
cache_manager.set("other_key", "value3")
cache_manager.invalidate_pattern("prefix_")
assert cache_manager.get("prefix_key1") is None
assert cache_manager.get("prefix_key2") is None
assert cache_manager.get("other_key") == "value3"
def test_get_stats(self, cache_manager):
"""测试获取统计信息."""
cache_manager.set("key1", "value1")
cache_manager.set("key2", "value2")
stats = cache_manager.get_stats()
assert stats['total_entries'] == 2
assert stats['valid_entries'] == 2
assert 'default_ttl' in stats
def test_cleanup_expired(self, cache_manager):
"""测试清理过期条目."""
cache_manager.set("expire1", "value1", ttl=1)
cache_manager.set("expire2", "value2", ttl=1)
cache_manager.set("valid", "value3", ttl=300)
time.sleep(1.1)
count = cache_manager.cleanup_expired()
assert count == 2
assert cache_manager.get("valid") == "value3"
def test_singleton(self):
"""测试单例模式."""
cache1 = get_cache_manager()
cache2 = get_cache_manager()
assert cache1 is cache2
def test_default_ttl(self, cache_manager):
"""测试默认 TTL."""
cache_manager.set("key", "value") # 使用默认 TTL
value = cache_manager.get("key")
assert value == "value"