我在Python中使用模拟,并想知道这两种方法中哪一种更好(请参阅:更多pythonic)。
方法一 :只需创建一个模拟对象并使用它即可。代码如下:
def test_one (self):
mock = Mock()
mock.method.return_value = True
self.sut.something(mock) # This should called mock.method and checks the result.
self.assertTrue(mock.method.called)
方法二 :使用补丁创建一个模拟。代码如下:
@patch("MyClass")
def test_two (self, mock):
instance = mock.return_value
instance.method.return_value = True
self.sut.something(instance) # This should called mock.method and checks the result.
self.assertTrue(instance.method.called)
两种方法都做同样的事情。我不确定这些差异。
谁能启发我?
mock.patch
与…是一个非常不同的生物mock.Mock
。
patch
用 模拟对象 替换 该类,并允许您使用模拟实例。看一下这个片段:
>>> class MyClass(object):
... def __init__(self):
... print 'Created MyClass@{0}'.format(id(self))
...
>>> def create_instance():
... return MyClass()
...
>>> x = create_instance()
Created MyClass@4299548304
>>>
>>> @mock.patch('__main__.MyClass')
... def create_instance2(MyClass):
... MyClass.return_value = 'foo'
... return create_instance()
...
>>> i = create_instance2()
>>> i
'foo'
>>> def create_instance():
... print MyClass
... return MyClass()
...
>>> create_instance2()
<mock.Mock object at 0x100505d90>
'foo'
>>> create_instance()
<class '__main__.MyClass'>
Created MyClass@4300234128
<__main__.MyClass object at 0x100505d90>
patch``MyClass
以允许您控制所调用函数中类的用法的方式进行替换。修补类后,对该类的引用将完全由模拟实例替换。
mock.patch
通常在测试要在测试内部创建类的新实例的东西时使用。
mock.Mock
实例更清晰,更可取。如果您的self.sut.something
方法创建了的实例MyClass
而不是将实例作为参数接收,则mock.patch
此处适当。
问题内容: 我正在尝试使用python模拟模块的函数(返回一些外部内容)。 我在导入模块的模拟函数时遇到了一些麻烦。 例如,在我有 我想嘲笑,以便它返回其他内容。 我正在尝试: 如果在另一个模块中被调用,它实际上似乎永远不会返回模拟对象。我在使用方法方面缺少什么吗? 请注意,如果我调用以下内容,则一切正常: 但是,如果从另一个模块内部调用,它将调用原始函数而不是模拟版本: 内容 所以我想我的问题是
本节介绍与jQuery Framework相关的各种模拟测试。 您可以在本地计算机上下载这些示例模拟测试,并在方便时离线解决。 每个模拟测试都提供一个模拟测试密钥,让您自己验证最终得分和评分。 jQuery Mock Test I 问题1 - 关于jQuery,以下哪项是正确的? A - jQuery是一个快速而简洁的JavaScript库,由John Resig在2006年创建,有一个很好的座右
本节介绍与Apache POI相关的各种模拟测试。 您可以在本地计算机上下载这些示例模拟测试,并在方便时离线解决。 每个模拟测试都提供一个模拟测试密钥,让您自己验证最终得分和评分。 Apache POI Mock Test I 问题1 - 关于Apache POI的HSSF组件,以下哪项是正确的? A - 用于读取和写入MS-Excel文件的xls格式。 B - 用于MS-Excel的xlsx文件
本节介绍与AngularJS Framework相关的各种模拟测试。 您可以在本地计算机上下载这些示例模拟测试,并在方便时离线解决。 每个模拟测试都提供一个模拟测试密钥,让您自己验证最终得分和评分。 AngularJS Mock Test I 问题1 - 关于AngularJS,以下哪项是正确的? A - AngularJS是一个构建大规模和高性能Web应用程序的框架,同时使它们易于维护。 B -
本节介绍与Bootstrap Framework相关的各种模拟测试。 您可以在本地计算机上下载这些示例模拟测试,并在方便时离线解决。 每个模拟测试都提供一个模拟测试密钥,让您自己验证最终得分和评分。 Bootstrap Mock Test I 问题1 - 关于Bootstrap,以下哪项是正确的? A - Bootstrap是一个时尚,直观,功能强大的移动第一前端框架,可以更快,更轻松地进行Web
本节介绍与Hibernate Framework相关的各种模拟测试。 您可以在本地计算机上下载这些示例模拟测试,并在方便时离线解决。 每个模拟测试都提供一个模拟测试密钥,让您自己验证最终得分和评分。 Hibernate Mock Test I 问题1 - JDBC代表什么? A - Java DB连接 B - Java数据库连接 C - Java数据绑定连接 D - Java数据绑定连接器 Ans