2017-03-24 11 views
6

मैं unittest लाइब्रेरी का उपयोग कर अपने मॉड्यूल का परीक्षण कर रहा हूं। इसमें matplotlib लाइब्रेरी का उपयोग करके कुछ ग्राफों को साजिश करना शामिल है। इस समय मुद्दा यह है कि जब भी ग्राफ को प्लॉट किया जाता है तो परीक्षण रोकता है, और ग्राफ को बंद करने के बाद ही यह फिर से शुरू होता है। इससे कैसे बचा जा सकता है?unittests चलाते समय ग्राफ बंद करें

+0

मैंने अपने पिछले उत्तर को उदाहरण के साथ –

उत्तर

6

मैं matplotlib ट्यूटोरियल से सरल उदाहरण कोड के बाद मेरा उत्तर मॉडल होगा: http://matplotlib.org/users/pyplot_tutorial.html

के हम है निम्नलिखित मॉड्यूल, plot_graph.py परीक्षण किया जाना मान लेते हैं:

import matplotlib.pyplot as plt 

def func_plot(): 
    plt.plot([1,2,3,4]) 
    plt.ylabel('some numbers') 
    plt.show() 

if __name__ == "__main__": 
    func_plot() 

show के लिए कॉल किया जा सकता है निम्नानुसार पैच किया गया:

from plot_graph import func_plot 
from unittest.mock import patch 

@patch("plot_graph.plt.show") 
def test_plot(mock_show): 
    assert func_plot() == None 

जैसा कि आप देख सकते हैं, आपकोपर कॉल पैच करना चाहिए। आप दस्तावेज़ों में पैचिंग और मॉकिंग के बारे में अधिक जानकारी प्राप्त कर सकते हैं: https://docs.python.org/3/library/unittest.mock.html

आमतौर पर जहां पैच करने के लिए के बारे में खंड वास्तव में उपयोगी है: https://docs.python.org/3/library/unittest.mock.html#where-to-patch

अंत में वहाँ इसी तरह के सवाल साइट पर पहले से ही कर रहे हैं: How to run nosetests without showing of my matplotlib's graph?

1

यदि यह परीक्षण में किया जाता है तो pyplot.show() पर कॉल न करें। documentationshow फ़ंक्शन पर एक प्रयोगात्मक block=False कीवर्ड तर्क का उपयोग करने का सुझाव देता है।

+0

'pyplot.show()' को मेरे मॉड्यूल में से एक में बुलाया है, परीक्षण में नहीं। 'ब्लॉक = गलत 'मेरे लिए काम नहीं करता है। मुझे लगता है कि यह बहिष्कृत है। – bluprince13

+0

शायद आपके परीक्षणों से pyplot.close ("all") को कॉल करना चाल चल सकता है। – Lukisn

0

हैकिंग के बजाय, आप ठोस से एक जिम्मेदारी सिद्धांत का उपयोग करने के लिए कोशिश कर सकते हैं और टेस्टेबल कोड लिखें, ताकि आप इस तरह की परेशानियों में न आएं। बस एक विचार ...

संबंधित मुद्दे