Python文档测试

转载出处
Python内置的“文档测试”(doctest)模块可以直接提取注释中的代码并执行测试。

doctest严格按照Python交互式命令行的输入和输出来判断测试结果是否正确。只有测试异常的时候,可以用...表示中间一大段烦人的输出。

用doctest来测试上次编写的Dict类mydict2.py

class Dict(dict):
	'''
	simple dict but also support access as x.y style.

	>>> d1 = Dict()
	>>> d1['a'] = 100
	>>> d1.a
	100

	>>> d1 = Dict()
	>>> d1.x = 200
	>>> d1['x']
	200

	>>> d2 = Dict(a=1, b=2, c='test')
	>>> d2.c
	'test'

	>>> d2['empty']
	Traceback (most recent call last):
		...                                 #用`...`代替中间的输出
	KeyError: 'empty'

	>>> d2.empty
	Traceback (most recent call last):
		...                                 #同上
	AttributeError: 'Dict' object has no such AttributeError
	'''
	
	def __init__(self, **kw):
		super().__init__(**kw)

	def __getattr__(self, key):
		try:
			return self[key]
		except KeyError:
			raise AttributeError (r"'Dict' object has no such AttributeError")

	def __setattr__(self, key, value):
		self[key] = value


if __name__ == '__main__':        #不要忘记加这里啊。。。
	import doctest
	doctest.testmod()

运行python mydict2.py, 什么输出也没有。这说明我们编写的doctest运行都是正确的。如果程序有问题,比如把__getattr__()方法注释掉,再运行就会报错:

C:\work>python mydict2.py
**********************************************************************
File "mydict2.py", line 7, in __main__.Dict
Failed example:
    d1.a
Exception raised:
    Traceback (most recent call last):
      File "C:\Users\pureJade\AppData\Local\Programs\Python\Python37\lib\doctest.py", line 1329, in __run
        compileflags, 1), test.globs)
      File "<doctest __main__.Dict[2]>", line 1, in <module>
        d1.a
    AttributeError: 'Dict' object has no attribute 'a'
**********************************************************************
File "mydict2.py", line 16, in __main__.Dict
Failed example:
    d2.c
Exception raised:
    Traceback (most recent call last):
      File "C:\Users\pureJade\AppData\Local\Programs\Python\Python37\lib\doctest.py", line 1329, in __run
        compileflags, 1), test.globs)
      File "<doctest __main__.Dict[7]>", line 1, in <module>
        d2.c
    AttributeError: 'Dict' object has no attribute 'c'
**********************************************************************
File "mydict2.py", line 24, in __main__.Dict
Failed example:
    d2.empty
Expected:
    Traceback (most recent call last):
            ...
    AttributeError: 'Dict' object has no such AttributeError
Got:
    Traceback (most recent call last):
      File "C:\Users\pureJade\AppData\Local\Programs\Python\Python37\lib\doctest.py", line 1329, in __run
        compileflags, 1), test.globs)
      File "<doctest __main__.Dict[9]>", line 1, in <module>
        d2.empty
    AttributeError: 'Dict' object has no attribute 'empty'
**********************************************************************
1 items had failures:
   3 of  10 in __main__.Dict
***Test Failed*** 3 failures.

注意到最后3行代码。当模块正常导入时,doctest不会被执行。只有在命令行直接运行时,才执行doctest。所以,不必担心doctest会在非测试环境下执行。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值