我正在做一个绘图函数的单元测试(使用pytest),该函数通过mplfiance(本质上是使用matplotlib的烛形图)调用plot方法。
我想在测试中设置对plot函数的调用,以便它不会实际创建图形。我只想在调用函数时查看参数是否正确。
例如
def plot_something(param1, param2):
# doing something with param1 and para2
param1 += 1
param2 *= 2
# below is the actual plotting where I would like to patch
make_plot(param1, param2)
def make_plot(param1, param2):
# make plot here
plot(param1, param2)
如何创建一个测试用例,以确保1)plot_something()和make_plot()都被调用。 2)声明了参数3)屏幕上没有实际显示任何图形?
我想打补丁是用测试函数中的内容替换make_plot()调用的方法。但是我不知道到底是怎么回事。
非常感谢您的建议。
答案 0 :(得分:1)
这让我好奇地自己测试模拟模块。这是我的代码,似乎工作正常:
from unittest import TestCase, main
from unittest.mock import Mock
import pylab
def plot_something():
x = [1,2,3]
y = [3,1,2]
pylab.plot(x, y, "o-")
pylab.show()
class TestPlot(TestCase):
def test_plot_something(self):
# save the original methods for later use (if required)
pyplot, pyshow = pylab.plot, pylab.show
pylab.plot, pylab.show = Mock(), Mock()
plot_something()
pylab.plot.assert_called_once_with([1,2,3], [3,1,2], "o-")
pylab.show.assert_called_once_with()
# restore the original ones again
pylab.plot, pylab.show = pyplot, pyshow
def test_plot_again_but_plot_really(self):
# this actually plots
plot_something()
if __name__ == "__main__":
main()
因此,在这里我什至修补了pylab方法。当然,在更高级别上进行干预更加容易(无论是否调用plot_someting
)。