为什么IDLE不需要'if __name__ ==“__ main__”:运行测试用例,但是PyCharm呢?

时间:2017-01-25 02:19:23

标签: python unit-testing main

我正在练习使用unittest,我在PyCharm中尝试了以下内容:

import unittest
from format_name import name_formatted

class TestName_formatted(unittest.TestCase):
    """practice with unittest"""

    def test_name(self):
        """Testing name_formatted function"""
        formatted_name = name_formatted("mike", "Cronin")
        self.assertEqual(formatted_name, "mike Cronin")

unittest.main()

经过研究,我看到它是这样写的:

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

突然间它完美无缺。但是,我这样写的原因,没有if语句,是因为我从“Python Crash Course”中学到了它,它使用GEANY和IDLE作为示例代码。当然,在这两个程序中,您不需要if语句。

为什么在一个IDE中代码不起作用而在其他IDE中起作用呢?

1 个答案:

答案 0 :(得分:6)

您正在PyCharm中运行代码,就像它是一个普通的Python应用程序一样;这就是你需要if __name__ == '__main__'条件的原因。这也是编写可以在命令行导入或运行的模块(文件)时的最佳实践 - 单元测试的情况。

PyCharm基本上是在尝试python your_file_name.py

IDLE不需要这个的原因是因为IDLE首先在Python shell中加载文件来运行应用程序。

IDLE正在做的是:

python
>>> import your_file_name

通过执行此操作,将自动评估代码,调用该函数,从而运行测试。

我还建议阅读PyCharm's manual中有关测试的文档,因为测试是PyCharm广泛支持的。在该链接中,您还会注意到示例测试用例的默认存根(或模板)已经进行if __name__ == '__main__'检查: