Unittest failed in Python IDE PyCharm
我试图用Python做一个简单的单元测试,但我不知道测试失败的原因。
我做了三个文件:
- name_function.py,其中我有一个函数接收两个参数(名字,姓氏)并返回连接名称。
1 2 3 | def get_formatted_name(first, last): full_name = first + ' ' + last return full_name.title() |
- names.py,其中要求用户输入名字和姓氏,或q要退出。之后调用函数get_formatted_name并打印连接名称。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | from name_function import get_formatted_name print(" Enter 'q' at any time to quit.") while True: first = input(" Please give me a first name :") if first == 'q': break last = input(" Please give me a second name :") if last == 'q': break formatted_name = get_formatted_name(first, last) print(" \t Neatly formatted name :" + formatted_name + '.') |
- test_name_function.py测试函数的位置。
1 2 3 4 5 6 7 8 9 | import unittest from name_function import get_formatted_name class NamesTestCase(unittest.TestCase): def test_first_last_name(self): formatted_name = get_formatted_name('Clint', 'Eastwood') self.assertEqual(formatted_name, 'Clint Eastwood') unittest.main() |
- 在此窗口中,我运行cmd命令(请参阅附加Capture_1)。
- 在cmd中,我运行命令(请参阅附加Capture_2和Capture_3)。
- 我不明白我的错误在哪里?在Capture_3中,查看我在运行测试时获得的内容。
- 我使用Python 3.7.2和我使用的IDE Python是PyCharm。
Capture_1
Capture_2
Capture_3
你的代码看起来不错。我在我的机器上运行它,效果很好。我唯一注意到的是
1 2 | if __name__ == '__main__': unittest.main() |
然后,您可以使用以下命令运行它。
这是因为假设您在交互式解释器上运行,并且在异常时它使用SystemExit失败。但是,就像在@Zykerd的评论中提到的那样
1 2 | if __name__ == '__main__': unittest.main() |
上面将通过假设从命令行而不是交互式解释器运行脚本来解决此问题。
干杯!
请在此处查看进一步说明:测试成功,仍然可以追溯
既然你专门询问PyCharm,那么这就是你所需要的:
-
从单元测试文件中删除最后一行:
unittest.main() - 或者做@Zykerd的建议然后把它变成
这个:
1 2 | if __name__ == '__main__': unittest.main() |
-
在PyCharm中右键单击测试并选择
Run Unittests in test_name_function
两者都工作(即没有调用main,或者主要名称后面的调用检查。