2017-03-24 4 views
6

unittestライブラリを使用してモジュールをテストしています。これには、matplotlibライブラリを使用してグラフをプロットすることも含まれます。現時点では、グラフがプロットされるたびにテストが一時停止し、グラフを閉じると再開するだけです。どうすればこれを避けることができますか?ユニットテストを実行中にグラフをオフにする

+0

私の以前の答えは、 –

答えて

6

私はmatplotlibのチュートリアルから、簡単なサンプルコードの後に​​私の答えをモデル化します:plot_graph.pyをテストするために、我々は、以下のモジュールを持っていると仮定しましょうhttp://matplotlib.org/users/pyplot_tutorial.html

show

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() 

呼び出しが可能

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

最後にそこに同様の質問は、サイト上に既にある:、あなたはSOLIDから単一責任の原則を使用しようとすることができ代わりにハッキングのHow to run nosetests without showing of my matplotlib's graph?

1

これがテストで行われた場合はpyplot.show()に電話しないでください。また、documentationは、show関数の実験的なblock=Falseキーワード引数を使用することを提案しています。

+0

で更新されました。 'pyplot.show()'はテストではなく私のモジュールの一つで呼び出されます。 'block = False'は私のためには機能しません。私はそれが非難されたと思う。 – bluprince13

+0

あなたのテストからpyplot.close( "all")を呼び出すと、そのトリックを行う可能性があります。 – Lukisn

0

とテスト可能なコードを書いて、あなたがこの種のトラブルに遭わないようにしてください。ちょっとしたアイデア...

関連する問題