我目前正在使用假设来模糊我的测试,但随后我需要生成随机数据类,因此为每个数据类构建策略,例如
# Base types
uint64 = st.integers(min_value=0, max_value=2**64 - 1)
uint256 = st.integers(min_value=0, max_value=2**256 - 1)
# Dataclasses types
account = st.fixed_dictionaries(
{
"nonce": uint64,
"balance": uint256,
"code": st.binary(),
}
).map(lambda x: Account(**x))
有没有办法避免这种明确的策略定义?不知何故,就像 rust 任意一样,从原始字节缓冲区生成类型良好的结构化值。
hypothesis.strategies.builds
说
数据类是通过类型提示的推断来本地处理的。
因此,如果您的数据类使用注册(或本身可自省)的类型进行了正确的类型提示,使得
from_type
返回您想要的策略,那么它应该只是
account = st.builds(Account)
如果您在正常的假设检验中使用这些,您甚至不需要指定; 让假设来推断它。