Python 2.7 mock/patch: 理解 assert_called_XYZ//
我是相对的新手 Python 和模块化测试 Python. 来自世界 48 我知道嘲笑的概念,但它看起来截然不同 45.
我发现这指南对我来说似乎非常有帮助:
http://www.voidspace.org.uk/python/mock/index.html
但是当我写下我的时候 /更复杂/ 用嘲弄依赖性测试,我注意到了一个奇怪的行为。
我决定创造一个减少,简单的例子,这也不起作用。
看看这一点,结果和我的期望是评论:
为什么
批准复制
, 即使他尚未创造出来?
为什么
带来预期的结果?
使用
有关该方法的批准未造成,我在这里找到:
https://coderoad.ru/12187122/
. 我在我的情况下转过这个模式,降低了
.
在某个地方我找到了一个模板
引用实例。 但我理解它是一种在调用之前操纵布局实例的方法,而不是作为访问可能由较低代码内部创建的实例的方法。 或者我错了?
我的周围:
Python 2.7.3
布局 0.8.8
Fedora. 19
可能是我对布局的了解/补丁,不正确。 任何人都可以熟练地解释什么是课堂布局以及它如何工作?
Edit1: 添加了输出
... 并补充说,释放括号以评论
这是出路:
我发现这指南对我来说似乎非常有帮助:
http://www.voidspace.org.uk/python/mock/index.html
但是当我写下我的时候 /更复杂/ 用嘲弄依赖性测试,我注意到了一个奇怪的行为。
我决定创造一个减少,简单的例子,这也不起作用。
看看这一点,结果和我的期望是评论:
import unittest
from mock import patch, Mock, MagicMock
class BasicTest/unittest.TestCase/:
@patch/"StringIO.StringIO"/
def testSomethingNotWorkingAsExpected/self, StringIOMock/:
StringIOMock.assert_called_once// # asserts, but why?
@patch/"StringIO.StringIO"/
def testSomethingSomehowWorking/self, StringIOMock/:
# self.instantiateStringIO// # intentionally commented out
assert StringIOMock.called # does not assert /leading to failure of this test/; as expected. If the above line is not commented, this asserts as expected.
def instantiateStringIO/self/:
import StringIO
StringIO.StringIO//
为什么
assert_called_once//
批准复制
StringIO
, 即使他尚未创造出来?
为什么
assert ClassMock.called
带来预期的结果?
使用
assert not ...
有关该方法的批准未造成,我在这里找到:
https://coderoad.ru/12187122/
. 我在我的情况下转过这个模式,降低了
not
.
在某个地方我找到了一个模板
ClassMock.return_value
引用实例。 但我理解它是一种在调用之前操纵布局实例的方法,而不是作为访问可能由较低代码内部创建的实例的方法。 或者我错了?
我的周围:
Python 2.7.3
布局 0.8.8
Fedora. 19
可能是我对布局的了解/补丁,不正确。 任何人都可以熟练地解释什么是课堂布局以及它如何工作?
Edit1: 添加了输出
... 并补充说,释放括号以评论
testSomethingSomehowWorking
这是出路:
.F
======================================================================
FAIL: testSomethingSomehowWorking /test_test.BasicTest/
----------------------------------------------------------------------
Traceback /most recent call last/:
File "/usr/lib/python2.7/site-packages/mock.py", line 1224, in patched
return func/*args, **keywargs/
File "test_test.py", line 15, in testSomethingSomehowWorking
assert StringIOMock.called # does not assert; as expected
AssertionError
----------------------------------------------------------------------
Ran 2 tests in 0.001s
FAILED /failures=1/
没有找到相关结果
已邀请:
1 个回复
冰洋
赞同来自:
不存在并且不批准。 它与写作不同
或任何其他方法。 布局库不检查是否实际上在布局上调用的方法。
如果您正在使用
http://www.voidspace.org.uk/py ... _with
, 正如预期的那样,它出现了秩序。
范围
您可以在调用不存在的方法时使用错误: