小编gla*_*nix的帖子

如何在 python 中模拟 pyplot.show(以防止显示绘图)

我想断言 matplotlib.pyplot.show 在我的类的方法之一中被调用,但我不希望该方法在单元测试期间实际调用 show() 并在外部窗口上绘图。无论我如何尝试模拟 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()
Run Code Online (Sandbox Code Playgroud)
#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()
Run Code Online (Sandbox Code Playgroud)

我还尝试为 mock_plot.show 设置返回值。当我使用调试器时,模型类中的 matplotlib 不会与 Mock 对象一起传播,所以我不确定如何模拟 matplotlib 模块或其成员函数。是否可以模拟 matplotlib? …

python unit-testing mocking matplotlib python-unittest

5
推荐指数
1
解决办法
1371
查看次数