Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 715|回复: 0

关于pycharm右键只能选择run Unitiest不能直接run的解决方法

[复制链接]
  • TA的每日心情
    奋斗
    2024-11-24 15:47
  • 签到天数: 804 天

    [LV.10]以坛为家III

    2053

    主题

    2111

    帖子

    72万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    726782
    发表于 2021-7-3 10:10:18 | 显示全部楼层 |阅读模式
    '''
    本人是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,运行成功
    '''
    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-12-22 21:04 , Processed in 0.059554 second(s), 30 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表