Python测试之doctest模块

Jul 25, 2015


今天看到一个关于贪心算法的帖子,学习一下

  • 代码:

     #-*-coding:utf-8-*-
     def sameSums(int_list):
     """
     >>> sameSums([4, 7, 6, 3])
     True
     >>> sameSums([3, 3])
     True
     >>> sameSums([4, 12, 16])
     True
     >>> sameSums([5, 1])
     True
     """
     new_lst = sorted(int_list, reverse=True)
     list1 = list()
     list2 = list()
     for n in new_lst:
     if sum(list1) < sum(list2):
     list1.append(n)
     else:
     list2.append(n)
     return sum(list1) == sum(list2)
     
     if __name__ == "__main__":
     import doctest
     doctest.testmod()
     lst = [3, 9, 10, 30, 8]
     print sameSums(lst)
    

学习点:


sorted函数用法:
  • sorted 函数用来对给定的List进行排序,它有四个可选参数,这里就介绍参数reverse,它决定排序规则:True降序,False升序
简单的贪心算法:
  • 贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。 也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。 这个题目:先将list从大到小排序,中间设置2个空的list,从大的开始选,下一次选的时候,需要 比较一下和,如果谁的和小,再添加一个,直到最后一个元素。
doctest测试模块:
  • 在 Python 的官方文档中,对 doctest 的介绍是这样的:
  • doctest 模块会搜索那些看起来像交互式会话的 Python 代码片段,然后尝试执行并验证结果。(注:即上面代码中引号"""里面的内容)
  • doctest测试模块是Python 发行版自带的标准模块,有2种使用方式:嵌入到源代码中和做成独立文件。上面是嵌入到源码中。

doctest的测试用例就像文档字符串一样,这句话的内涵在于:测试用例的位置必须放在整个模块文件的开头,或者紧接着对象声明语句的下一行。也就是可以被 doc 这个属性引用到的地方。并非像普通注释一样写在哪里都可以。另:verbose 参数用于控制是否输出详细信息,默认为 False,如果不写,那么运行时不会输出任何东西,除非测试 fail。

  • 上例中启动测试的方式是在 main 函数里调用了 doctest.testmod() 函数。对于__main__函数另有他用的情况,则还可以通过命令行来启动测试:

     python -m doctest XXX.py
     python -m doctest -v XXX.py
     (XXX为文件名)
     其中 -m 表示引用一个模块,-v 等价于 verbose=True。
    
  • 独立文件模式:

  • 直接把测试用例写在一个独立的文本文件里,如 example.txt,运行方法:
 Python shell 里:
 >>> import doctest
 >>> doctest.testfile('example.txt')
 
 或者在系统 shell 里:
 python -m doctest -v example.txt

参考文章:如何捅破python编程的那层纸之二Python 各种测试框架简介


结语:

坚持每天进步一点点...



Content

AltStyle によって変換されたページ (->オリジナル) /