首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用ValidationError检测发热ValidationError的处理

用ValidationError检测发热ValidationError的处理
EN

Stack Overflow用户
提问于 2022-09-27 09:50:07
回答 1查看 76关注 0票数 0

当使用假设测试我的发热模型时,我不知道如何处理自定义验证器抛出的ValidationError。这是一个很小的例子,说明了这个问题:

代码语言:javascript
复制
# model
from pydantic import BaseModel, validator

class SimpleModel(BaseModel):
    a: int
    b: int

    @validator('b')
    def check_numbers(cls, b, values):
        if b*values['a'] < 0:
            raise ValueError('a*b > 0 does not hold')
        return b

# test
from hypothesis import given, strategies as st

@given(st.builds(SimpleModel))
def test_simple_model(instance: SimpleModel):
    assert type(instance.b) == int

到目前为止,我已经编写了自定义假设搜索策略,只生成有效的实例。但是对于更复杂的模型来说,这变得非常繁琐,所以在我看来,必须有一种更聪明的方法来“使用”ValidationError。在测试函数之前也会引发错误,因此我无法在测试函数中处理它。

我需要一种生成实例的可能性,即跳过引发ValidationError的实例。

EN

回答 1

Stack Overflow用户

发布于 2022-09-27 09:50:07

在使用了更多的假设功能之后,我提出了这个方法,它使用了composite策略和assume。使用复合,我创建了一个自定义策略,然后可以在given装饰器中使用。在假设内部,当抛出ValidationError时,用于告诉假设示例是不好的,应该跳过。

代码语言:javascript
复制
from pydantic import ValidationError
from hypothesis import given, assume, strategies as st

@st.composite
def simple_model_strategy(draw) -> SimpleModel:
    try:
        simple_model = draw(st.builds(SimpleModel))
    except ValidationError:
        assume(False)
    return simple_model

@given(simple_model_strategy())
def test_simple_model(instance: SimpleModel):
    assert type(instance.b) == int

备注:

  • 我以前曾在测试中假设过,但就像这样,在模型生成期间也可以这样做。
  • 如果在大多数自动生成的实例上调用了假设,则假设还会警告测试用例的问题。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73865567

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档