【问题描述】
已有完全数判断函数IsPerfect(n),测试这个函数能否正确判断一个数是否是完全数。完全数就是约数之和等于其本身的正整数。如6是完全数,因为6=1+2+3,而12就不是完全数,因为12≠1+2+3+4+6。
输出结果:
备注:两个ok表示两个测试用例都通过了测试,2 passed and 0 failed表示两个测试用例通过,0个失败,最后一句Test passed表示所有测试用例都通过了测试。
【题前思考】
根据问题描述,填写表11-1-1。
表11-1-1 问题分析
【操作提示】
doctest提供了编写测试用例的简单语法,只要将函数调用和相应的期望结果书写到其指定位置即可。docttest还提供了运行测试用例的方法,只需在程序中调用该方法就能启动测试,看到测试结果,并能定位到不成功的测试用例。
【程序代码】
【代码分析】
①:doctest要求写在函数定义的函数头下面,以三个双引号开头和结尾。
②:每一个测试输入以>>>开头,后面跟一个空格,然后输入要测试的函数调用。在下一行开头写出这个函数调用的预期结果。在本测试用例中,输入的函数调用为IsPerfect(6),表示判断6是否为完全数,如果是则返回True,如果不是则返回False,因为6是完全数,所以预期的输出结果为True。
③:当模块被直接运行时,以下代码块将运行,当模块被导入时,代码块不被运行。__name__是当前模块名,当模块被直接运行时,__name__的值为__main__。
④:导入doctest模块,并运行testmod方法,启动测试过程,输出测试结果。参数verbose=True表示输出详细的测试结果,其默认值为False。
【优化提升】
如果不想在模块中编写代码启动测试过程,可以在PyCharm窗口底部的“Terminal(终端)”面板中直接运行命令启动测试。此时if__name=='__main__'及其以后的代码都不用写,直接输入命令python-m doctest-v a11_1_1使用doctest进行测试.py即可,输出结果与上述相同。选项-v表示输出详细的测试信息。输入的命令如图11-1-1所示。
图11-1-1 在Termial中使用doctest