- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想写一个hypothesis.stateful.RuleBasedStateMachine
它断言在某些情况下会引发异常。 pytest
提供 raises
用于编写异常测试的上下文管理器。如果我使用 pytest.raises
在 hypothesis.stateful.rule
里面,导致测试失败的步骤顺序未报告。
不使用 pytest.raises
重写规则产生所需的行为:显示步骤的顺序。
下面是一些示例代码:
from os import getenv
from pytest import raises
from hypothesis.stateful import RuleBasedStateMachine, rule
SHOW_PROBLEM = getenv('SHOW_PROBLEM') == 'yes'
# A state machine which asserts that an exception is raised in under some condition
class FifthCallShouldRaiseValueError(RuleBasedStateMachine):
def __init__(self):
super().__init__()
self.model = Model()
self.count = 0
if SHOW_PROBLEM:
# This version does NOT report the rule sequence
@rule()
def the_rule(self):
self.count += 1
if self.count > 4:
with raises(ValueError):
self.model.method()
else:
# This version DOES report the rule sequence
@rule()
def the_rule(self):
self.count += 1
if self.count > 4:
try:
self.model.method()
except ValueError: assert True
except : assert False
else : assert False
T = FifthCallShouldRaiseValueError.TestCase
# A model that deliberately fails the test, triggering reporting of
# the sequence of steps which lead to the failure.
class Model:
def __init__(self):
self._count = 0
def method(self):
self._count += 1
if self._count > 4:
# Deliberate mistake: raise wrong exception type
raise TypeError
要观察行为的差异,请执行测试
SHOW_PROBLEM=yes pytest <...>
SHOW_PROBLEM=no pytest <...>
在第二种情况下,输出将显示
state = FifthCallShouldRaiseValueError()
state.the_rule()
state.the_rule()
state.the_rule()
state.the_rule()
state.the_rule()
state.teardown()
第一种情况的输出中缺少这一系列步骤。这是我们所希望的:在两种情况下都应显示序列。
pytest.raises
提高 Failed: DID NOT RAISE <class 'ValueError'>
而手写版提高了AssertionError
.前者在未能引发所需的异常时提供更多信息,但不知何故似乎阻止了 hypothesis.stateful
来自报告步骤的顺序,它告诉我们如何进入该状态,并且通常是输出中最有趣的部分。
除了不使用 pytest.raises
之外,还可以做些什么来缓解这种情况,即确保打印出步骤顺序?
最佳答案
事实证明,如果规则引发 BaseException
或非 Exception
子类,则不会打印这些步骤。 pytest.raises(...)
如果它没有得到预期的异常,就会引发这样的错误,而你就是这样。
https://github.com/HypothesisWorks/hypothesis/issues/1372
既然它已经被识别出来,这并不是一个特别棘手的错误 - 感谢您通过报告可重现的案例参与其中! - 所以我们应该尽快修复。
更新:此错误已在 Hypothesis 3.65.1 中修复, 于 2018-07-03.
关于python-hypothesis - 使用 pytest.raises 的假设状态测试不报告步骤顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51068206/
我希望能够采用正则表达式并使用 python 假设库生成符合要求的数据。例如给定一个正则表达式 regex = re.compile('[a-zA-Z]') 这将匹配任何英文字母字符。一个示例生成器可
我有以下使用基因组数据创建数据框的策略: from hypothesis.extra.pandas import columns, data_frames, column import hypothe
我有一个复合的、构建起来昂贵但测试起来便宜的策略。我必须这样做: @given(expensive_strategy()) def test_all(x): assert... ass
我想创建 End 大于 Start 的数据框。 我用的是: from hypothesis.extra.pandas import columns, data_frames, column impor
我刚刚将一个 pytest 测试套件从 quickcheck 迁移到 hypothesis。这工作得很好(并立即发现了一些隐藏的边缘案例错误),但我看到的一个主要区别与两个属性管理器之间的测试隔离有关
高质量的代码离不开单元测试,而设计单元测试的用例往往又比较耗时,而且难以想到一些极端情况,本文讲述如何使用 Hypothesis 来自动化单元测试 刷过力扣算法题的同学都知道,有时候觉得代码已经很
我用 conda install hypothesis 在 Anaconda 上安装了假设.我在 Spyder 上使用 Python 3.7。 在名为 testing.py 的文件中我写 from h
我正在尝试使用假设来生成一组数据帧,并将其合并在一起。我希望允许每个单独的列具有 NaN 值,并且我希望允许 Hypothesis 生成一些古怪的示例。 但我最想关注的是每个数据帧中至少有一行具有实际
我正在尝试使用假设来生成一组数据帧,并将其合并在一起。我希望允许每个单独的列具有 NaN 值,并且我希望允许 Hypothesis 生成一些古怪的示例。 但我最想关注的是每个数据帧中至少有一行具有实际
我有多年的编程经验,但我对 C++ 还很陌生。我不完全明白下面一行会做什么: this -> obj = MyObject(param) 首先,我有以下假设会发生什么: 调用 MyObject(par
可以指示基于属性的框架 QuickCheck 通过使用收集和测量效用函数来测量生成特定测试用例的频率(例如:同一个人平均下订单的频率,下空订单的频率)。是否有可能像在 Quickcheck 中那样调整
我想生成具有以下条件的大小为 2 的整数列表的列表。 第一个元素应小于第二个元素 所有数据都应该是唯一的。 我可以使用自定义函数生成每个元组,但不知道如何使用它来满足第二个条件。 from hypot
我想写一个hypothesis.stateful.RuleBasedStateMachine它断言在某些情况下会引发异常。 pytest提供 raises用于编写异常测试的上下文管理器。如果我使用 p
为了测试当我添加两个非常相似的数据行时我的数据库的行为,我需要为每个参数组合设置一个新数据库。我还使用 Hypothesis 的策略来生成“相似”的数据行。 测试工作流程应如下所示: for exam
考虑以下示例: df = pd.read_csv('myFile.txt',delim_whitespace=True,header=None) df.columns=['vary','vax1','
我有一个分位数回归模型,其中包含 1 个回归变量和 1 个回归变量。我想假设检验回归量在每个分位数上都相等。我想到的一种方法是在 {0.01,0.02,....,0.99} 上测试所有 tau。但是,
我正在使用假设 python 包进行测试。 我收到以下错误: Flaky: Hypothesis test_visiting produces unreliable results: Falsifie
当使用假设库并执行状态测试时,如何查看或输出库正在尝试我的代码的 Bundle“服务”? 例子 import hypothesis.strategies as st from hypothesis.s
我是一名优秀的程序员,十分优秀!