[PyCharm] if __name__ == '__main__': 其下的代码未执行_解决方案

问题描述

python脚本中使用import unittest导入unittest进行单元测试,有多个测试类的测试方法,本来是想放到if __name__ == '__main__':其下进行调用控制测试的执行顺序,但实际执行脚本的时候并没有执行if __name__ == '__main__':其下的代码。

在网络上找了很多相关的方法,但是并没有真正解决问题所在,一度比较苦恼,比如有尝试过如下方法:

  1. Settings-->Tools-->Python Integrated Tools中的Default test runner为py.test
  2. Edit Configurations-->从左侧的Python tests导航栏Remove Configuration(Alt+Delete)-->右键执行代码or右上角的执按钮执行代码-->Save xx Configuration
  3. 鼠标定位到if __name__ == '__main__':所在区域,然后执行代码
    ......

被测代码

import unittest

class Test_StartEnd(unittest.TestCase):
    def setUp(self):
        print("--Test Start--")

    def tearDown(self):
        print("--Test End--")

class Test2(Test_StartEnd):
    def test_c(self):
        print("C")

    def test_b(self):
        print("B")

class Test1(Test_StartEnd):
    def test_a(self):
        print("A")

class Test3(Test_StartEnd):
    def test_d(self):
        print("D")

if __name__ == '__main__':
    suite = unittest.TestSuite()
    suite.addTest(Test3("test_d"))
    suite.addTest(Test2("test_c"))
    suite.addTest(Test1("test_a"))
    suite.addTest(Test2("test_b"))

    runner = unittest.TextTestRunner()
    runner.run(suite)

执行结果:

预期所想要的效果是:D-->C-->A-->B
实际执行的效果确是:A-->B-->C-->D

原因分析

后来发现,之前所执行代码对应的方式是Run 'Unittests in xxx.py',PyCharm默认执行Unittests类的单元测试,忽略了if __name__ == '__main__':的执行,也就没有执行整个xxx.py文件



解决方案

在PyCharm顶部的工具栏上,点击 Run-->Run...

在弹出的Run选择框中,点击与文件xx.py同名的选项
Run xx.py相当于执行整个xx.py文件,也就包含if __name__ == '__main__':其下的代码了)

此时,执行的结果与预期所想实现的效果一致

执行结果:D-->C-->A-->B

编辑和保存Run xx.py的设置,以便后续方便以同样方式执行
(此步可根据具体情况选择是否操作)




参考来源:
[1]pycharm执行测试用例时需要使用的姿势(解决if name == "main":里面的程序不生效的问题)(第三目)
[2]Pycharm won't allow to run a file. Shows run unittest option only.
[3]# python unittest不执行"if name == 'main' "问题(Pycharm)

你可能感兴趣的:([PyCharm] if __name__ == '__main__': 其下的代码未执行_解决方案)