我目前正在学习单元测试,我偶然发现了一个奇怪的错误:
如果我从PyCharm内部运行我的脚本,一切都很完美。如果我从cmd.exe
(作为管理员)运行它,我会收到以下错误:
这是我的代码:
import unittest
class TutorialUnittest(unittest.TestCase):
def test_add(self):
self.assertEqual(23,23)
self.assertNotEqual(11,12)
# function for raising errors.
def test_raise(self):
with self.assertRaises(Exception):
raise Exception`
答案 0 :(得分:27)
只需删除.py
扩展程序。
您正在使用-m
命令行标志运行测试。 Python文档会告诉您更多相关信息,请查看此link。
总之,-m
选项允许您运行模块,在您的情况下是unittest
模块。此模块希望接收模块路径或类路径,遵循模块路径的Python格式(使用点)。例如,如果要在mypackage文件夹中的mytests模块中运行FirstTest类,可以使用以下命令行:
python -m unittest mypackage.mytests.FirstTest
假设您正在从mypackage的父文件夹运行上一个命令行。这允许您精确选择要运行的测试(甚至在模块内部)。
当您添加.py
扩展名时,unittest
正在您提供的模块路径的最后一个元素中查找py
对象(如模块或类),但是这个对象不存在。这正是您的终端错误所说的:
AttributeError: ’module’ object has no attribute ’py’
答案 1 :(得分:0)
您可以在脚本底部添加:
if __name__ == "__main__":
unittest.main()
然后您可以正常运行python test_my_function.py