40 lines
1.2 KiB
Python
40 lines
1.2 KiB
Python
"""内置存储实现的契约一致性测试。
|
|||
|
|
|
||
|
|
两个实现(内存 / SQLite)跑**完全相同**的用例。这是"持久层可替换"这句话能成立的
|
||
|
|
唯一证据——否则换后端就是在赌。
|
||
|
|
"""
|
||
|
|
|
||
|
|
from __future__ import annotations
|
||
|
|
|
||
|
|
import tempfile
|
||
|
|
from pathlib import Path
|
||
|
|
|
||
|
|
from chongming_task.stores.memory import InMemoryTaskStore
|
||
|
|
from chongming_task.stores.protocol import TaskStore
|
||
|
|
from chongming_task.stores.sqlite import SqliteTaskStore
|
||
|
|
from chongming_task.testing.store_contract import StoreContract
|
||
|
|
|
||
|
|
|
||
|
|
class TestInMemoryStore(StoreContract):
|
||
|
|
"""内存实现。"""
|
||
|
|
|
||
|
|
def make_store(self) -> TaskStore:
|
||
|
|
return InMemoryTaskStore()
|
||
|
|
|
||
|
|
|
||
|
|
class TestSqliteFileStore(StoreContract):
|
||
|
|
"""SQLite 文件库——真实使用场景(跨进程、可重启)。"""
|
||
|
|
|
||
|
|
_tempdir: tempfile.TemporaryDirectory[str]
|
||
|
|
|
||
|
|
def make_store(self) -> TaskStore:
|
||
|
|
self._tempdir = tempfile.TemporaryDirectory(prefix="chongming-store-")
|
||
|
|
return SqliteTaskStore(Path(self._tempdir.name) / "tasks.db")
|
||
|
|
|
||
|
|
|
||
|
|
class TestSqliteMemoryStore(StoreContract):
|
||
|
|
"""SQLite 内存库——语义必须与文件库一致。"""
|
||
|
|
|
||
|
|
def make_store(self) -> TaskStore:
|
||
|
|
return SqliteTaskStore(":memory:")
|