为什么 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__'
检查:
我正在练习使用 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__'
检查: