我正在嘗試爲我寫的Tkinter應用程序實現unittests(同時瞭解它們)。爲此目的,我已成功地創建一個圍繞我的應用程序的基本結構非常簡約的單元測試,如下圖所示(傳遞一個Tkinter的實例爲master
):單元測試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
兩次。但是,當我嘗試在整個應用程序中運行相同的概念時,它會崩潰在我班的__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擺弄周圍,但我真的不掌握概念呢。下面是MassyTools.py文件的一個子集,包括違規self.toolbar
行:
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()
因此,問題是,如果我要在單元測試不同的實例化,修改應用程序有一個虛擬根好象叫這個方式或其他東西完全。
我們可以看到編譯器錯誤? –
我不認爲它增加了很多信息,但我現在添加了它。 –