python - pytest:断言测试没有输出
问题描述
是否可以断言使用 pytest 运行的测试不会从 Python 或 C 标准输出输出任何内容?理想情况下,这将是全局的,以及一些手动注释的排除项。
我已经阅读了 pytest捕获文档,并且可以在每个测试中使用该系统,但我希望避免在任何地方传递捕获夹具,以及修改所有测试。
(运行 doctests 会隐式检查这一点,因为它会根据每个示例行的预期检查输出,但我想在单元测试的任何意外输出上出错)
解决方案
自动使用的夹具可以在拆卸时检查 capsys 的内容:
# in conftest.py
import pytest
@pytest.fixture(autouse=True)
def no_output(capsys):
yield
out, err = capsys.readouterr()
if out or err:
pytest.fail(f"output captured: {out + err}")
这仍将允许您的测试套件进行一些明确期望输出的测试,因为当no_output
夹具处于拆卸状态时,capsys 将已经被消耗。
# test_example.py
def test_no_output():
pass
def test_output_allowed(capsys):
print("ok")
out, err = capsys.readouterr()
assert not err
assert out == "ok\n"
推荐阅读
- html - 无法在 Google Chrome 中寻找、倒带 html 音频播放器,它只是不起作用
- node.js - multer req 文件未定义,但为什么呢?
- algorithm - 给定一些数字,如何构建一个包含算术表达式的所有排列的高效树?
- python - 无法将背景图像与静态文件 Django 连接
- r - 在 Shiny 中按窗口宽度折叠和展开面板
- c++ - 读取输入时如何缩短代码?
- kotlin - 实体类在房间数据库中不起作用
- ruby-on-rails - Hotwire rails 应用程序:重定向到外部服务失败
- java - 如何识别 Redis 是否已关闭或是否正在运行?
- ios - 如何使用 Localizable.string 文件在 iOS 中使部分文本变为粗体?