''' 本人是python初学者 看的课本是[python变成从入门到实践]课本指定编译器是Geany,用了一小段时间后,朋友推荐了pycharm,所以就用的pycharm编辑python, 在课本的'测试函数'这一章中,pycharm无法显示书中所示的结果,所以就了解了一下 PS:在geany中是完全再现书中的结果 要测试的方法:name_function.py中的get_formatted_name()方法 import unittest from name_function import get_formatted_name
class NamesTestCase(unittest,TestCase): """测试name_function.py""" def test_first_last_name(self): """能够正确的处理像Janis Joplin这样的姓名吗?""" formatted_name = get_formatted_name('janis','joplin') self.assertEqual(formatted_name,'janis joplin') def test_first_last_middle_name(self): """能够正确的处理像Wlfgang Amadeus Mozart这样的姓名吗?""" formatted_name = get_formatted_name('wolfgang','mozart','amadeus') self.assertEqual(formatted_name,'Wolfgang Amadeus Mozart') # 这一行是为了看__name__的值 print('*****'+_name_) # 将unittest.main()改成下面这样 if __name__ == '__main__': unittest.main()
print('*****'+_name_) 这个是为了看_name_的值,记得要注释掉,否则别的py文件调用这个py文件的时候会运行,末尾和书中有点不一样, unittest.main() 和 if __name__ == '__main__': unittest.main() 都可以,但是最好还是第二种,为了避免别的.py文件引用该文件后会运行该文件的unittest.main()方法,看不懂的下面就是解释 这样的代码,结果不一定和梳理的一样,为什么呢? 这要先从_name_这个属性开始说: 比如一个python文件,命名为a.py 当从编辑器中直接运行a.py或者从命令行中直接运行a.py,那么a.py的__name__属性就是'__main__' 如果另外有一个b.py,从b.py中导入a.py,即b.py中import a,然后运行a.py,那么a.py的__name__属性就a.py的文件名,也就是'a' 详情见: python中 if __name__ == '__main__': 说完__name__,大家就要看运行该文件时实际运行的是什么 为了更明白的说明问题,不要用ctrl+shift+f10运行,要点右键,出来菜单后点运行 正常来说,只有运行该py文件,结果才能跟书里的一样 拿上面的例子来说,要运行test_name_function.py才能出来书中的结果,即点右键,出来菜单后点'run test_name_function',但实际上点击了右键 后出来的却是'run Unittest in test_name_function',这个的意思好像是在test_name_function中运行Unittest,还是在Unittest中运行 test_name_function,我也不是太清楚,总之,好像是一个引用,这就导致了__name__属性变了,不是'__main__',而是'test_name_function',导致 出不来书中的结果,如下 图略 运行结果不是我们想要的 这个问题的关键就在于,怎么讲'run Unittest in test_name_function'变成'run test_name_function' 有三种方法: 一:unittest运行单个用例 1.如上代码如果我只想运行其中一个,如test_name_function,如何运行呢? 2.如果想运行哪个用例,鼠标放到对应的区域,右键就能直接运行单个用例了 二:unittest运行整个脚本用例 1.如果想当前的脚本上所有的用例一起执行,只需要把鼠标放到if __name__ == '__main__',这句话的后面或者下方就行了 三:python直接运行模式 1.以上方式只能执行单元测试框架里面的内容,是没有测试报告输出的,如果想输出测试报告,就得以非unittest模式运行,也就是python直接运行 2.点右上角,点开:Edit Configurations 3.展开python和python tests这两个选项,会发现刚才运行的脚本名称在python tests这个选项下,也就是pycharm这个工具自动默认为unittest姿势 运行了 4.解决方法,只需从这里移除掉就行,选中这个脚本,点左上角的减号 5.全部移除后,点Apply应用,然后点保存 6.再回到脚本页面,右键运行,就能出测试报告(鼠标一定要放在if这一行后边右键,才能看到正常显示Run‘test’)
'''
''' 以上是在不明白python规则情况下的解决办法。 知道今天在研究unittest自动化测试,了解到unittest单元测试的最小单位是函数,且这些函数都要以test开头,这是才潘然醒悟,可能就是下面这个原因
pycharm默认支持python自有单元测试包'unittest',所以定义的函数或者类包含'test'或者'TEST'的自研就默认只能使用unittest的方式运行 最后把脚本里面的test改成tst,运行成功 ''' |