我想确认在我的类方法中是否调用了matplotlib.pyplot.show方法,但是我不希望该方法在单元测试期间实际调用show()并在外部窗口上绘制图形。无论我如何尝试mock matplotlib,它似乎都不起作用。我将列出代码的重要部分:
#In Model Test Class:
import Model
import matplotlib
import unittest
from unittest.mock import patch
class Model_Test(unittest.TestCase):
@patch('matplotlib.pyplot')
def test_plot_data(self, mock_pyplot):
model = Model()
model.plot_data()
mock_pyplot.show.assert_called_once()
#In Model Class:
import matplotlib.pyplot as plt
import pandas as pd
class Model(object):
... # (__init__ and other methods)
def plot_data(self):
self.dataframe.plot(y=self.dataframe.columns, subplots=False, figsize=(15, 8), fontsize=12)
plt.title('Data for Model Version: ' + self.version, fontsize=20)
plt.xlabel('timestamp', fontsize=12)
plt.ylabel('value', fontsize=12)
plt.show()
我还尝试为mock_plot.show设置返回值。当我使用调试器时,Model类中的matplotlib未传播Mock对象,因此我不确定如何mock matplotlib模块或其成员函数。是否可以mock matplotlib?
有任何想法如何在单元测试中正确地mock matplotlib(主要是防止显示图形)?
编辑:我通过将修补程序装饰更改为@patch('matplotlib.pyplot.show')使其正常工作,但我仍然不确定为什么之前的尝试失败。