受shouldy启发的python断言助手
shouldbe的Python项目详细描述
要求
- 禁果
- Python的一个版本,禁果可以用来工作 (必须实现ctypes/cpython python api)
- python 2.7或3.3 (它可以与其他版本一起使用,例如其他3.x版本, 但它还没有经过这些版本的测试)
示例
>>> import should_be.all >>> class Cheese(object): ... crackers = 3 ... >>> swiss = Cheese() >>> swiss.crackers.should_be(4) AssertionError: swiss.crackers should have been 4, but was 3
注意
因为python repl显示堆栈跟踪的方式,如果 断言是在repl上的一行中键入的,'(未知)'将改为显示 瑞士饼干。当“应该是”语句出现时,这不是问题 而是在一个文件中。
安装
简单的方法
$ sudo pip install https://github.com/DirectXMan12/should_be.git#egg=ShouldBe
稍微不那么简单的方法
$ git clone https://github.com/DirectXMan12/should_be.git
$ cd should_be
$ ./setup.py build
$ sudo ./setup.py install
延伸
写你自己的断言是相当容易的。有两个核心部分
应该是:BaseMixin
,然后应该是。
所有断言都应该放在继承自BaseMixin
的类中。
BaseMixin
提供了扩展内置对象的基本实用程序
你的断言。
保存断言的类应该有一个名为
target_class
。这是运行断言的类。
默认情况下,它设置为object
。如果你想有你的主张
在object
上运行,有一些额外的注意事项要做(请参见
以下警告)。
然后,断言应该定义为实例方法。每个方法都应该调用
self.should_follow
一次或多次。把“应该”跟在后面
服用类固醇。它有以下签名:
should_follow(self,assertion,msg=None,**kwargs)
。显然,断言是
当False
引起的表达式应该紧跟在后面,以引发一个断言错误。
到目前为止,还算正常。msg
是事情变得有趣的地方。msg应该是
一个新样式的python格式字符串,它只包含命名替换。由
默认情况下,should_follow
将把txt和self键传递给格式方法,
除了传递给should_follow
的任何关键字参数之外。很明显,self是
当前对象。txt
是表示当前对象的代码。例如,
如果我们写(3).should_be(4)
,txt将是“(3)”。如果我们写信
cheese.variety.should_be(‘cheddar’)
,txt应该是“cheese.variety”。
一旦你所有的断言都写下来了,你就可以简单地写
MyAssertionMixin.mix()
加载断言。a设置工具
钩子正在自动自定义自定义断言混合
用importshould_be.all
。
警告
当扩展对象时,还需要创建适当的混合函数
NoneType
,因为none本身没有实例方法(因为
self
设置为none,python解释器抱怨道)。谢天谢地,
这相当容易。只需创建一个继承自NoneTypeMixin
的类,
并将类变量source_class
设置为对象的名称
上课。然后您可以简单地运行MyNoneTypeMixin.mix()
,您的方法将
从您的^ {< CD5> } MIXIN类中自动检索并转换。
注意
abc的断言(如sequence)将自动混合到“registered”
当
调用mix()
方法(这还将检查注册的类
到ABC的子类)。