萨马奇测试你的公共API的回归!
samarche的Python项目详细描述
萨马奇
api检查器灵感来自this post
快速启动
假设您正在开发一个带有公共api的模块,供工作人员使用 有了它,这个api应该在下一个major之前保持不变 释放。如果提交做了不应该做的更改会发生什么 ?
解决方案正在测试:
# A class which is part of your APIclassFoo:bar=Truedef__init__(self,stuff=False):self.stuffdefthing(self):return"doh"# Your tests to make sure the class stays consistentself.assertTrue(hasattr(Foo,'bar'))self.assertTrue(hasattr(Foo,'thing'))self.assertTrue(hasattr(Foo(),'stuff'))
不幸的是,这些测试基本上是每秒编写所有的api 时间到了,一定有更好(而且不那么无聊)的方法!
Samarche允许您对自己的API(称为 signature)然后能够根据 它。
Samarche只注册公共成员(即以^{tt2}开头的所有内容$ 被跳过)可以从module创建签名, module.package甚至module.package:package_attribute
示例
首先生成并保存api的签名:
# Do this at each major releaseimportsamarchesignature=samarche.build_signature("my_api")withopen('my_api.signature','wb')asfd:samarche.dump(signature,f)
然后把你的测试放在某个地方
withopen('my_api.signature','rb')asfd:original_signature=samarche.load(fd)try:samarche.check_signature('my_api',original_signature)exceptsamarche.ValidationErrorase:print("API has changed : {}".format(e))