【发布时间】:2016-09-21 15:35:13
【问题描述】:
我正在开发一个具有命令行界面的应用程序,我想使用 pytest 对其进行测试。我的想法是定义测试类,如
class TestEchoCmd(Scenario):
commands = [
"echo foo"
]
stdout = "foo\n"
然后使用带有测试方法的类进行实际测试。换句话说,不是在每个描述场景的类中定义测试方法——这总是相同的——(这将非常乏味),这些类从Scenario类继承测试方法:
class Scenario:
commands = []
stdout = ""
def test_scenario(self, capsys):
for cmd in self.commands:
ret = my_app.execute_command(shlex.split(cmd))
assert ret == 0
stdout, stderr = capsys.readouterr()
assert stdout == self.stdout
只要测试通过,它就可以正常工作。如果测试失败,那么 pytest 会简单地输出 AssertionError 而没有其他信息,这与未继承测试方法的情况不同,它非常详细地描述了 asserted 表达式。这会适得其反,因为无法准确说明断言失败的原因。
有没有办法让它工作?我真的很想让场景描述尽可能简洁。 (我知道@pytest.mark.parametrize,但我认为在这种情况下它不会产生非常可读的代码。)
(哦,顺便说一下,这是 Debian GNU/Linux 提供的 pytest 3.0.2。)
【问题讨论】:
标签: python inheritance pytest