【发布时间】:2014-03-03 21:52:22
【问题描述】:
例如:
import mock
class MyClass(object):
def foo(self, x, y, z):
return (x, y, z)
class TestMyClass(TestCase)
@mock.patch('MyClass')
def TestMyClass(self, MyClassMock):
foo_mock = MyClassMock.foo()
self.assertEquals((x, y, z), foo_mock)
所以,真正的问题是:如何获得该测试的返回而不是获得此 <MagicMock name='MyClass.foo()' id='191728464'> 或如何处理此 MagicMock 对象以获取该测试的返回,该测试应该是一个包含 3 个元素且什么都没有的元组多还是少?
欢迎任何建议、任何想法、任何争论。 提前致谢!
【问题讨论】:
-
您是否正在尝试测试
MyClass.foo()是否正常工作?因为那样你就不应该嘲笑它。 -
没有。这个问题的想法是知道如何获得该测试的返回而不是 MagicMock 对象,因为我会在不同的场景中应用它。有些测试我需要确切的值作为回报,而不是 MagicMock 对象。
-
我在下面构建了一个示例;一个确实模拟了其他东西,但确实设置了返回值。
-
如果您真的想模拟
MyClass.foo(),那么您的示例过于冗长(而且不正确,def TestMyClass()上没有self)。在任何情况下,您都在直接调用模拟,并且原始的MyClass.foo()从不被调用,因为它已被模拟取代。 -
不需要显式调用类,甚至不需要实例化它。模拟库使一切变得神奇。不知何故,按照我上面的示例代码,在运行测试后,foo_mock 将仅被称为
<MagicMock name='MyClass.foo()' id='191728464'>。
标签: python unit-testing mocking python-unittest python-mock