描述类的规范工具

specif的Python项目详细描述


指定

类似于python的PHPSpec。只是为了好玩。如果您正在寻找一个真正有效的phpspec,可以检查flowp(但不推荐)。mamba也可能引起你的兴趣,即使这不是你正在搜索的内容。

安装

pip install specify

用法

您可以检查examples文件夹。

fromspecifyimportObjectBehaviorfromexamples.calculatorimportCalculatorclassCalculatorSpec(ObjectBehavior):def_let(self):self._describe(Calculator)self._be_constructed_with('lorem',id=32)defit_adds_the_numbers(self):self.add(2,3)._should_be(5)

命令python -m specify examples/spec/calculator_spec.py将呈现有效的tap输出(希望如此)。

TAP version 13
1..1

ok 1 - CalculatorSpec: it adds the numbers

为了获得漂亮的输出,您可以使用像faucet这样的tap格式化程序。

  • 所有规范必须以it_开头。

  • 所有规范文件现在必须以_spec结尾。

内置火柴

MatcherDetailsAlias
^{}check with ^{}^{}
^{}check with ^{}^{}
^{}check with ^{}^{}
^{}check with ^{}^{}
^{}check with ^{}^{}
^{}check with ^{}

自定义匹配器

您可以在规范中实现一个_matchers函数来添加自定义匹配器。

匹配器的键由_should_和第一个参数左修剪 传递给函数的是值本身。

如果返回false,则测试将失败。

下面是一个示例:

classCalculatorSpec(ObjectBehavior):# ...defit_adds_the_numbers(self):self.add(2,3)._should_be_a_number()self.add(2,3)._should_be_greater_than(10)def_matchers(self):defbe_a_number(value,*args):returnisinstance(value,int)defbe_greater_than(value,expected_value):returnvalue>expected_valuereturn{'be_a_number':be_a_number,'be_greater_than':be_greater_than}

流畅的API

所有匹配器(内置和自定义)都是可链接的。示例:

self.add(2, 3)._should_be_a_number()._should_be(5)._should_be_greater_than(3)

模拟

多亏了prophepy(你用prophecy得到双关语了吗?呵呵),你可以 以一种Prophecy的方式轻松地模拟事物。

合作者

给定这个Displayer类:

from.calculatorimportCalculatorclassDisplayer:def__init__(self,calculator:Calculator):self.calculator=calculatordefdisplay_addition(self,*args)->str:total=str(self.calculator.add(*args))args=[str(arg)forarginargs]returnf"{' + '.join(args)} = {total}"

这是规范,模拟Calculator

fromspecifyimportObjectBehavior,mockfromexamples.calculatorimportCalculatorfromexamples.displayerimportDisplayerclassDisplayerSpec(ObjectBehavior):@mock(Calculator)def_let(self,calculator):self._describe(Displayer)self._be_constructed_with(calculator)self.__calculator=calculatordefit_displays_addition(self):self.__calculator.add(2,3)._should_be_called()self.__calculator.add(2,3)._will_return(5)self.display_addition(2,3)._should_be_like('2 + 3 = 5')

轻松点。

对模块的内部调用

fromspecifyimportmock_internal# ...@mock_internal('getcwd',lambda:'loremipsum',from_module='os')defit_displays_addition(self):# ...# getcwd() will return 'loremipsum' and will be go back to default afterthetest

待办事项

  • 处理属性而不仅仅是方法
  • 改进模拟内部调用的方式
  • 使抽头输出为规范所述的流
  • 改进目前加载规范的糟糕方式(可能像mamba那样使用ast?)

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

推荐PyPI第三方库


热门话题
打开OrientDB数据库时发生java错误   java Hibernate合并函数偶尔会导致主键冲突   java如何在SourceTransferndexit将msg放入MQ   JavaEclipse不正确地导入项目   Java中的数据结构,带有删除节点后所有节点的操作   java创建zip存档时,什么构成重复条目   java如何计算所有值并比较每个对象?   java Threadflipbegin在Google Pixel 3上被阻止55秒   java Eclipse Hibernate:未找到适合jdbc的驱动程序:mysql://localhost:3306/hibernatedb   java Quartz计划程序未运行   java如何从junit扩展向@Test返回值?   java忽略搜索字段中的大小写   java如何从图库中选取图像,裁剪并保存在数据分区中   java CST/CDT时区更改问题   url从Java读取Twitter页面   java是否要在每个列表项中打开WebView单击?   比较输入值的Java布尔逻辑初学者   如何在服务器端使用java从客户端的HTTP POST请求接收和解析JSON对象   javascript在一个get请求中,如何启动程序,然后使用另一个get请求停止它?