我想为一个函数编写单元测试(使用pytest),该函数创建matplotlib的图但返回None。
假设show_plot函数看起来像这样:
将matplotlib.pyplot导入为plt
…
您希望以您期望的方式测试您正在使用库。
首先,你有一个依赖 plt 。所以让我们重新编写一下这个函数。
plt
import matplotlib.pyplot as plt def show_plot(plt=plt): plt.plot([1, 2, 3], [4, 5, 3])
这允许您注入一个存根,以便您可以测试它。
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])