【发布时间】:2017-02-17 10:13:42
【问题描述】:
我正在尝试为我编写的 Tkinter 应用程序实现单元测试(同时了解它们)。为此,我设法围绕我的应用程序的基本结构创建了一个非常简约的单元测试,如下所示(将 Tkinter 实例作为master 传递给它):
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()
运行这个测试会因为 root 没有定义而崩溃(见下面的错误)。
根据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()
因此,问题是我是否应该在单元测试中以不同的方式实例化它,如果以这种方式或完全以其他方式调用,则修改应用程序以具有假根。
【问题讨论】:
-
我们能看到编译器错误吗?
-
我不认为它增加了很多信息,但我现在已经添加了。
标签: python python-2.7 tkinter python-unittest