oli*_*679 10 python matplotlib pytest
我有几个创建绘图的函数,我在 Jupyter 笔记本中使用它们来可视化数据。
我想为这些创建基本测试,检查它们是否仍然运行,如果我进行更改,各种输入不会出错。但是,如果我使用 pytest 调用这些函数,创建绘图会导致程序挂起,直到我手动最小化绘图。
import pytest
import matplotlib.pyplot as plt
def plot_fn():
plt.plot([1,2,3])
plt.show()
def test_plot_fn():
plot_fn()
Run Code Online (Sandbox Code Playgroud)
如何使用 Pytest 测试“plot_fn”等函数的运行而不出错?我尝试了以下方法,但它不起作用,我认为是因为 plt.show() 导致脚本挂起,因此无法到达 plt.close('all')。
def test_plot_fn():
plot_fn()
plt.close('all')
Run Code Online (Sandbox Code Playgroud)
我很高兴更改绘图函数的行为,例如返回 plt 对象?
我不确定如何matplotlib交互pytest,但似乎您需要使用fixtures才能实现此目的。您还需要在测试中创建某种assert语句,以指示测试优雅地拆除您的装置。像这样的事情应该会达到预期的结果。
import pytest
import matplotlib.pyplot as plt
@pytest.fixture(scope='function')
def plot_fn():
def _plot(points):
plt.plot(points)
yield plt.show()
plt.close('all')
return _plot
def test_plot_fn(plot_fn):
points = [1, 2, 3]
plot_fn(points)
assert True
Run Code Online (Sandbox Code Playgroud)
如果你想要简单的monkeypatch行为show,我会这样做,如下所示。
def test_plot_fn(monkeypatch):
monkeypatch.setattr(plt, 'show', lambda: None)
plot_fn()
Run Code Online (Sandbox Code Playgroud)
这有效。
from unittest.mock import patch
import pytest
import matplotlib.pyplot as plt
def plot_fn():
plt.plot([1,2,3])
plt.show()
@patch("matplotlib.pyplot.show")
def test_plot_fn(mock_show):
plot_fn()
Run Code Online (Sandbox Code Playgroud)
基于这个答案(可能重复)运行单元测试时关闭图表
| 归档时间: |
|
| 查看次数: |
7023 次 |
| 最近记录: |