如何在假设的“状态测试”示例中正确使用类型提示?

问题描述 投票:0回答:1

我正在尝试正确输入提示假设的状态测试示例

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]

那么我该如何解决“捆绑”问题呢?

python mypy python-typing python-hypothesis
1个回答
0
投票
    keys: Bundle[bytes] = Bundle("keys")
    values: Bundle[bytes] = Bundle("values")

应该在这里解决问题!

A

Bundle
只是一种特殊的策略,它 also 可用于
@rule(target=<some_bundle>)
以及普通策略有效的任何地方。

© www.soinside.com 2019 - 2024. All rights reserved.