记录然后断言模拟库

dingus的Python项目详细描述


一个dingus有点像一个模拟对象。主要的区别在于你没有提前设定期望值。您只需运行代码,在另一个对象或类的
位置使用一个dingus,它就会记录发生在它身上的事情。然后,
一旦您的代码被执行,您就可以断言它对dingus做了什么。


从dingus类创建了一个新的dingus。您可以给dingues命名,
这有助于调试您的测试,特别是当有多个
dingues在游戏中时。

>;>;from dingus import dingus
>;>;d=dingus('root')
>;>;d
<;dingus root>;


访问dingus的任何属性都将返回一个新的dingus。

>;d.something
<;dingus root.something>;


对于特殊的dingus方法有一些例外。我们将在
位中看到一些。丁格斯也可以像函数或方法一样被调用。它不在乎你给它多少参数,也不在乎那些参数是什么。对dingus的调用将始终返回相同的对象,而不考虑参数。

>;>;d()
<;dingus root()>;
>;>;d("参数")
<;dingus root()>;
>;>;d(55)
<;dingus root()>;


调用列表中的每个
条目都包含:

*调用的方法的名称(如果调用了dingus本身,则为"()")
*参数,如果没有,则为()
*关键字argumnets,如果没有,则为{}
*返回给调用方的值

以下是我们到目前为止对d所做的调用的列表:

>;>;来自pprint import pprint
>;>;pprint(d.calls)
[('('),(,),{},<;dingus root()>;),
('),('argument',),{},<;dingusroot()>;),
('()',(55,),{},<;dingus root()>;)]


您可以按名称、参数和关键字参数筛选调用:

>;>;pprint(d.calls('()',55))
[('()',(55,),{},<;dingus root()>;)]

如果不关心某个特定参数的值,则可以在筛选时使用该值
don t care:

{},<;dingus root()>;),
('()',(55,),{},<;dingus root()>;)]


dingues可以做的不仅仅是访问和调用属性。它们支持许多python操作符。我们的目标是允许并记录任何
交互:

>;>d=dingus('root')
>;>2**d.something)['hello'](/100*'foo'
<;dingus root.something.[uu rpow\[hello]()。[uu div\]uu mul\>;

(希望你真实世界的丁格斯录音不会像这样!)

==
修补
==

示例:

>;>from dingus import patch
>;>import urllib2
>>>>带补丁('urllib2.urlopen'):
…打印urllib2.urlopen.\uu class\ubr/><;class'dingus.dingus'>;
>;>;打印urllib2.urlopen.\uu class\ubr/><;键入'function'>;

;>;@patch('urllib2.urlopen')
…def test_something(self):
…通过



==
隔离
==
==


与补丁相反的是隔离。它会修补除命名对象之外的所有对象:

>;>from dingus import isolate
>;@isolate('urllib2.urlparse')
…定义测试解析(自身):
…通过



运行此测试时,urllib2模块中的所有内容(urlparse除外)都将是一个
dingus。请注意,如果模块包含许多
对象,则执行此操作可能会很慢;欢迎使用性能修补程序。:)

==

==
危险魔法
==
==

这允许您编写完全隔离的单元测试。有关示例,请参见
examples/urllib2/test\u urllib2.py。作者不再推荐这个特性,因为它可以鼓励非常脆弱的测试。您应该感受到手动模拟依赖关系的痛苦;当
类与太多其他类协作时,这种痛苦会告诉您。

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

推荐PyPI第三方库


热门话题
在java中查找特定命名方案的所有文件   java需要帮助在这个程序中查找错误,编译但不是计算机所必需的数字   java Androidsocket连接被拒绝   java在单元测试中使用Intent类   sql server 2008换行转义序列在Java中没有以正确的方式回避   嵌入十六进制编码的unicode Java字符串   java无法为类实现tester程序   为json字符串创建通用java映射器   java如何将2个TextView与Android中的if-else条件放在同一位置   java如何初始化锁?   为什么我的多项式类加法函数不起作用?   java Intellij不使用库构建JavaFX   java为什么在EJB类上同时使用@LocalBean和接口?   java无法在Spring Security中登录   Java中的文件创建   运行servlet需要哪个JRE。。服务器JRE还是客户端JRE?   来自Windows命令行的SOAP Web服务中的java SSL证书问题   java JPA如何为实体实施OneOnOne关系?