我正在尝试正确输入提示假设的状态测试示例:
import shutil
import tempfile
from collections import defaultdict
import hypothesis.strategies as st
from hypothesis.database import DirectoryBasedExampleDatabase
from hypothesis.stateful import Bundle, RuleBasedStateMachine, rule
class DatabaseComparison(RuleBasedStateMachine):
def __init__(self) -> None:
super().__init__()
self.tempd = tempfile.mkdtemp()
self.database = DirectoryBasedExampleDatabase(self.tempd)
self.model: dict[bytes, set[bytes]] = defaultdict(set)
keys = Bundle("keys")
values = Bundle("values")
@rule(target=keys, k=st.binary())
def add_key(self, k: bytes) -> bytes:
return k
@rule(target=values, v=st.binary())
def add_value(self, v: bytes) -> bytes:
return v
@rule(k=keys, v=values)
def save(self, k: bytes, v: bytes) -> None:
self.model[k].add(v)
self.database.save(k, v)
@rule(k=keys, v=values)
def delete(self, k: bytes, v: bytes) -> None:
self.model[k].discard(v)
self.database.delete(k, v)
@rule(k=keys)
def values_agree(self, k: bytes) -> None:
assert set(self.database.fetch(k)) == self.model[k]
def teardown(self) -> None:
shutil.rmtree(self.tempd)
TestDBComparison = DatabaseComparison.TestCase
但是,当我运行 mypy (Python 3.11.3,mypy 1.3.0)时:
temp.py:17: error: Need type annotation for "keys" [var-annotated]
temp.py:18: error: Need type annotation for "values" [var-annotated]
那么我该如何解决“捆绑”问题呢?
keys: Bundle[bytes] = Bundle("keys")
values: Bundle[bytes] = Bundle("values")
应该在这里解决问题!
A
Bundle
只是一种特殊的策略,它 also 可用于 @rule(target=<some_bundle>)
以及普通策略有效的任何地方。