【问题标题】:pytest testing functions with known result具有已知结果的 pytest 测试函数
【发布时间】:2019-02-25 15:26:58
【问题描述】:

假设我有以下课程:

class SimpleClass:

    def __init__(self, value):
        self.__value = value

    @property
    def value(self):
        return self.__value

    def power_value(self, power):
        return self.value**power

我将创建这个类的一个实例。

x = SimpleClass(2)

我想创建一个测试,通过将power_value 方法与预期结果进行比较来断言它可以正常工作。

def test_power_value(simple, power, result):
    assert simple.power_value(power) == result

我正在寻找使用pytest 实现此功能的正确方法,因为我这样做的方式会引发错误(pytest 正在寻找simplepowerresult成为固定装置)。最终,我希望能够按如下方式使用此测试:

test_power_value(x, 2, 4)

with pytest.raises(AssertionError):
    test_power_value(x, 2, 5)

【问题讨论】:

  • 不相关,但如果您使用的是 Python 2.7.x,则属性仅适用于新样式类(继承自 object 的类)。此外,您可能应该使用“受保护”属性(单前导下划线) - 双前导下划线实际上是为了防止复杂库/框架的基类中的意外名称冲突,实际上很少有用。
  • 定义灯具有什么问题?你的 with pytest.raises(AssertionError) 块也没有任何意义,因为你已经测试过结果等于 4,它不能(或者,如果你以某种方式覆盖了 __eq__ 方法,不应该)等于 5

标签: python pytest


【解决方案1】:

你定义为“test_power_value”的东西并不是真正的测试,而是 pytest 中的辅助函数。

在 pytest 中,您在代码中运行测试函数 - pytest 为您执行测试 - 这就是它寻找固定装置的原因。只需重命名您的函数,使其不以“test”开头

def assert_power_value(simple, power, result):
    assert simple.power_value(power) == result

你可以在测试中使用它:

def test_foo():
    x = 1
    with pytest.raises(AssertionError):
        assert_power_value(x, 2, 5)

十个运行你的测试:

pytest your_test_file.py

【讨论】:

    猜你喜欢
    • 2021-10-05
    • 2020-02-27
    • 1970-01-01
    • 1970-01-01
    • 2019-08-05
    • 1970-01-01
    • 2018-01-22
    • 2013-10-06
    • 2015-10-10
    相关资源
    最近更新 更多