私が書いたTkinterアプリケーションのunittests(それらについて学んでいる間)を実装しようとしています。その目的のために(master
としてそれをTkinterのインスタンスを渡す)は、以下に示すように、私は自分のアプリケーションの基本的な構造の周りに非常に最小限のユニットテストを作成するために管理している:tkinterアプリケーションのユニットテスト
classTest.py
#! /usr/bin/env python
from Tkinter import *
class App():
def __init__(self,master):
self.text = "foo"
self.printy()
def printy(self):
print self.text
return "test"
# Call the main app
if __name__ == "__main__":
root = Tk()
app = App(root)
root.mainloop()
test.py
#! /usr/bin/env python
from Tkinter import *
import unittest
import classTest
class testTest(unittest.TestCase):
def test(self):
a = classTest.App(Tk())
self.assertEqual(a.printy(),"test")
if __name__ == "__main__":
unittest.main()
このテストでは、正常に実行されたことが表示されますが、foo
が2回印刷されます。しかし、私がアプリケーション全体で同じコンセプトを実行しようとすると、私のクラスの__init__
でクラッシュします。
unitTest.py
#! /usr/bin/env python
import unittest
from Tkinter import *
import MassyTools
class readTest(unittest.TestCase):
def test(self):
a = MassyTools.App(Tk())
self.assertEqual(a.readData("./tests/calibrated_IBD cohort sample H6-run 1_0_E24_1.xy")[0][0],1299.11)
if __name__ == "__main__":
unittest.main()
このテストを実行すると、ルートが定義されていないという事実にそれをクラッシュ(エラー下記参照)。
私はこのblogpostごとにあざけるの周りいじるされていますが、私は本当にまだ概念を把握していません。私は、ユニットテストでは異なって、それをインスタンス化し、この中で呼び出された場合、偽のルートを持っているようにアプリケーションを変更する必要がある場合
class App():
def __init__(self, master):
# The Canvas
self.canvas = FigureCanvasTkAgg(self.fig, master=master)
self.toolbar = NavigationToolbar2TkAgg(self.canvas, root)
self.canvas.get_tk_widget().pack(fill=BOTH, expand=YES)
self.canvas.draw()
したがって、質問は次のとおりです。以下は、問題self.toolbar
ラインを含むMassyTools.pyファイルのサブセットです道や他の何かを完全に。
は、我々はコンパイラエラーを参照してくださいもらえますか? –
私はそれが多くの情報を追加するとは思わないが、私は今それを追加しました。 –