受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将把txtself键传递给格式方法, 除了传递给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的子类)。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Jetty是否有请求缓存?   数组中的java 2值与我的数据帧中的2列对应   对象序列化期间的java DbUtils类型转换问题   java根面板中不显示所有单独的面板   java通过代理或SSH隧道连接Hbase API   java困惑:与经典MVC控制器相比,JSF2中bean的角色   java在我的Triangle类中“找不到符号错误”   java在Android中设置从路径到自定义按钮的图像   java不绕轨道旋转椭圆   AES在socket上搞砸了序列化/反序列化。无效的流标头。JAVA   java在数组中搜索term和if语句   线程“main”java中出现异常。util。正则表达式。PatternSyntaxException:在索引0附近悬挂元字符“*”*   Websphere上的java Google反射无法打开url连接   java为什么inc/dec频道什么都不做?   java KeyListener无法访问keyPressed方法