2016-03-09 62 views
0

下面是如何设置程序。我有一个(自然)等待用户输入的UI。Python单元测试运行主要功能

root = Tk() 
root.title("This space intentionally left blank") 
mainFrame = Frame(root) 
mainFrame.grid(column=1, row=2) 
sideFrame=Frame(root) 
sideFrame.grid(column=2, row=2) 
topLabelFrame=Frame(root) 
topLabelFrame.grid(column=1, row=1, columnspan=99) 
main() 
root.mainloop() 

这是我的单元测试:

from unittest import TestCase 
from AL2.AutoLinker2_0 import InputProcessor 


    class TestInputProcessor(TestCase): 

     def test_tokenize(self): 
      IP = InputProcessor("") 
      self.assertEqual(IP.tokenize("elbow mac"), ["elbow", "mac"]) 

当我跑,我的用户界面弹出,直到我关闭UI挂断单元测试。 我是新来的单元测试,但我的理解是,单元测试应该只测试类,不应该需要运行整个程序。这是我不理解,或者这可能是IDE(pycharm)的问题,或者是我的程序设置错误? 谢谢!

+2

如果你没有在模块格式的代码,并且您将它导入到你的单元测试,它会运行GUI代码。确保你使用了一个if __name__ ==“__main__”条件 – Tanner

+0

Tanner,我希望你能发布这个答案,以便我可以接受它。 – boristhescot

回答

2

将Python文件作为模块导入时,将在解析文件时执行全局范围中的任何代码。这也适用于类内的任何代码。

为了让您的文件是进口的和可调用的,你需要使用:

#!/usr/bin/python3 
x = 1 
y = 3 

if "__name__" == "__main__": 
    print(x+y) 

__name__总是包含当前模块,正在执行一个模块时,除了名称,在这种情况下,将有名称为“__main__”

欲了解更多信息,请参阅:http://effbot.org/pyfaq/tutor-what-is-if-name-main-for.htmhttps://www.ibiblio.org/swaroopch/byteofpython/read/module-name.html