关于PyCharm中Python测试不是run_testname 而是run_unittest_in_testname 的问题

本人是python初学者
看的课本是《Python编程从入门到实践》【美】Eric Matthes 著;袁国忠 译,中国工信出版集团,人民邮电出版社出版
课本指定编辑器是Geany,用了一小段时间后,朋友推荐PyCharm,所以就用的PyCharm编辑python
在课本的“测试函数”这一章中,PyCharm无法显示书中所示的结果,所以就了解了一下
PS:在Geany中是完全再现书中的结果的

要测试的方法:name_function.py中的get_formatted_name()方法:
《关于PyCharm中Python测试不是run_testname 而是run_unittest_in_testname 的问题》

书中编写的方法如图:

《关于PyCharm中Python测试不是run_testname 而是run_unittest_in_testname 的问题》

print("**** "+__name__)

这个是为了看__name__的值,记得要注释掉,否则别的py文件调用这个py文件的时候会运行
末尾和书里的有点不一样

unittest.main()

if __name__=='__main__':
    unittest.main()

都可以,但是最好还是第二种,为了避免别的 .py文件引用该文件后会运行该文件的

uniittestmain()方法,

看不懂的下面就是解释
这样的代码,结果不一定 跟书里的一样,为什么呢?
这要先从__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’,导致出不来书中的结果,即下图

《关于PyCharm中Python测试不是run_testname 而是run_unittest_in_testname 的问题》

《关于PyCharm中Python测试不是run_testname 而是run_unittest_in_testname 的问题》

运行结果不是我们想要的

这个问题的关键就在于,怎样将
run’Unittest in test_name_function’
变成
run’test_name_function’
我总结了两种方法:
法一:
右击,菜单中点‘open in terminal’即在命令行中运行,出来命令行后输入

python test_name_function.py

回车运行,然后就会出现书中的结果,此时不要关闭命令行,根据结果修改.py文件,ctrl+S保存后,在命令行中直接按方向键的上键,重复上次的命令,这样就不用每次都敲入命令了
法二:
右上角,打开下拉菜单,如图

《关于PyCharm中Python测试不是run_testname 而是run_unittest_in_testname 的问题》

点击 Edit Configurations,编辑配置文件,打开后如下图

《关于PyCharm中Python测试不是run_testname 而是run_unittest_in_testname 的问题》

图中python test下的就是Unittest in test_name_function,选中,点击左上角的红色减号,去掉这一条,然后选中python test 上面的python,点击左上角的绿色加号,出来下拉菜单选python选项,然后出来的界面,点script path最右边的小方框,选中py文件路径,点OK
如图

《关于PyCharm中Python测试不是run_testname 而是run_unittest_in_testname 的问题》

再在最上面的Name一栏中把unnamed删掉,写入名字,最好是py文件的文件名,直接从script path中把名字那一段复制粘贴上去就行
然后点右下角apply,再点ok
退出来到test_name_function.py文件中,右击,发现是 run’test_name_function’选项,点击运行,出来结果和书上的一样

补充:
test_name_function.py是为了给name_function.py中的get_formatted_name()方法测试而创建的
到 test_name_function.py 中,光标放到 get_formatted_name 这个名字上,ctrl+shift+T,出来选项,点击“Create New Test。。。”自动生成测试文件,再添加一些内容,对照下图

《关于PyCharm中Python测试不是run_testname 而是run_unittest_in_testname 的问题》

《关于PyCharm中Python测试不是run_testname 而是run_unittest_in_testname 的问题》

PS:
那个self.fail()是干嘛的,有什么用,系统自动生成,我暂时还不知道
我也是看了别人的博客、论坛后自己总结的,有很多原理性的东西我并不太了解,但是我会继续努力学习!

    原文作者:Louzen
    原文地址: https://segmentfault.com/a/1190000014437611
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞