标签:pre att for elf 最好 不能 自动 应用 怎么
‘‘‘
本人是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,运行成功
‘‘‘
关于pycharm右键只能选择run Unitiest不能直接run的解决方法
标签:pre att for elf 最好 不能 自动 应用 怎么
原文地址:https://www.cnblogs.com/johnny889/p/9967415.html