为什么 IDLE 不需要 'if __name__ == "__main__": 到 运行 一个测试用例,但 PyCharm 需要?

Why doesn't IDLE need 'if __name__ == "__main__": to run a test case, but PyCharm does?

我正在练习使用 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 中不起作用,而在其他代码中却起作用?

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

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

IDLE 不需要这个的原因是因为 IDLE 运行通过首先加载 Python shell.

中的文件来启动应用程序

IDLE 正在做的是:

python
>>> import your_file_name

通过这样做,代码被自动评估,函数被调用,因此测试 运行s。

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