记录然后断言模拟库

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 Drools:不触发规则2,而在内部触发规则1(进入循环)   java有一个易于破解的开源Tivo媒体服务器吗?   Elasticsearch中termFilter与mustFilter in、shouldFilter和orFilter之间的java差异   java在两台计算机之间传输文件   Java主版本不匹配   hibernate Java Netbeans BeanCreationException   java如何在JFreeChart linechart中显示数据库值   java多个持久性错误IntelliJ   java在Python 3.6中调用sklearn2pmml()函数会引发RuntimeError   java正在执行包含在带有空格的文件夹中的cmd文件   java Spring Boot无法访问REST控制器   Java Spring启动外部日志文件jar   java为什么Clojure用未检查的异常包装检查的异常?   java使用ANTLR4获取方法的注释   Java:通用静态多维数组   java JavaFX了解场景状态(打开或关闭)