gpt4 book ai didi

python - 测试创建的返回 None 的函数图

转载 作者:行者123 更新时间:2023-12-01 08:12:37 25 4
gpt4 key购买 nike

我想为一个函数编写一个单元测试(使用 pytest),该函数创建 matplotlib 绘图但返回 None。

假设函数 show_plot 如下所示:

import matplotlib.pyplot as plt

def show_plot():

# create plot
plt.plot([1, 2, 3], [4, 5, 3])

# return None
return None

当您调用函数 show_plot() 时,您将看到创建的绘图,但不会返回绘图对象。

如何编写单元测试来测试我的函数 show_plot 是否绘制了正确的图?或者至少检查我的函数是否确实在绘制某些内容?

编辑:我无法更改或调整我的函数 show_plot()!

我需要这样的东西:

def test_show_plot():
# run show_plot
show_plot()

# Need help here!
# ...
# define plot_created
# ...

# logical value of plot_created, which indicates if a plot was
# indeed created
assert plot_created

例如我发现here这是一个有趣的 stdout 方法,我希望有类似捕获绘图的东西。

最佳答案

您想要测试您是否按照预期的方式使用该库。

首先,您依赖于plt。因此,让我们稍微重写一下该函数。

import matplotlib.pyplot as plt

def show_plot(plt=plt):
plt.plot([1, 2, 3], [4, 5, 3])

这允许您注入(inject)一个 stub ,以便您可以测试它。

from unittest import mock
def test_show_plot():
mock_plt = mock.MagicMock()
show_plot(mock_plt)
mock_plt.plot.assert_called_once_with([1, 2, 3], [4, 5, 3])

但是你怎么知道这实际上创造了情节?好吧,在 shell 上尝试使用真实的库进行相同的调用,然后亲自看看它是否有效。

如果无法更改原有功能,请参阅mock.patch

# plot.py
import matplotlib.pyplot as plt

def show_plot():
plt.plot([1, 2, 3], [4, 5, 3])


# test.py
from unittest import mock

@mock.patch('path.to.your.module.plt')
def test_show_plot(mock_plt):
show_plot()
mock_plt.plot.assert_called_once_with([1, 2, 3], [4, 5, 3])

关于python - 测试创建的返回 None 的函数图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55144336/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com