- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
例如:
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()
是否正常工作,您不应该模拟它。
模拟用于被测代码之外的任何事物;如果 foo
调用了另一个外部函数 some_module.bar()
,那么您将模拟 some_module.bar()
并给它分阶段返回值:
import some_module
class MyClass(object):
def foo(self, x, y, z):
result = some_module.bar(x, y, z)
return result[0] + 2, result[1] * 2, result[2] - 2
class TestMyClass(TestCase):
@mock.patch('some_module.bar')
def test_myclass(self, mocked_bar):
mocked_bar.return_value = (10, 20, 30)
mc = MyClass()
# calling MyClass.foo returns a result based on bar()
self.assertEquals(mc.foo('spam', 'ham', 'eggs'),
(12, 40, 28))
# some_class.bar() was called with the original arguments
mocked_bar.assert_called_with('spam', 'ham', 'eggs')
在这里,我将 mocked_bar.return_value
设置为调用模拟的 some_module.bar()
函数时应返回的值。当被测代码实际调用 bar()
时,模拟会返回该值。
当您不设置return_value
时,将返回一个新 MagicMock()
对象,该对象将支持进一步的调用,您可以像在 mocked_bar
对象上一样测试这些调用,等等。
关于Python Mock - 如何像普通方法一样返回 MagicMock,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21611595/
在 Python3.4 中: >>> import mock.MagicMock >>> type(mock.MagicMock()) == mock.MagicMock False # Huh, w
我正在迁移我的项目的 python 版本 (2->3)。测试对 python2 工作正常,但对 python3 提示,错误就像 TypeError: '>' not supported between
为什么“wraps”关键字不能始终对 MagicMock 对象起作用?普通方法传递给包装对象,但不是“特殊”方法。在下面的测试中,第一个断言通过,第二个断言失败。 import mock import
( python 2.6) 我有一个方法: def send_all(self, messages): for message in messages: queue.send(
我运行了一个快速测试,看看是否有什么工作...... >>> from unittest.mock import MagicMock >>> x = MagicMock() >>> x.func.re
假设有人在python文件的头部将模块设置为MagicMock: sys.modules['moduleABC'] = mock.MagicMock() 这会引起麻烦,因为当我尝试运行整个单元测试列表
我有以下配置类: class ConfigB(object): Id = None def __Init__(self, Id): self.Id = Id 它在以下类中实例化并打印属
(Python 2.6) 我在 MagicMock 修补中遗漏了一些东西 给出以下生产代码: class MyQueue(object): def send(self, message):
我想在 Python 测试中模拟一个方法。为此,我需要 MagicMock,我尝试像这样导入它: from unittest import TestCase from unittest.mock im
我想为测试对象模拟一些不重要的函数(其他函数)- time.sleep() 等 我可以用简单的模拟替换它们,这会起作用。但是我希望它在使用错误数量的参数调用时报告错误,没有命名参数等。 有什么方法可以
我想做的是这个... x = MagicMock() x.iter_values = [1, 2, 3] for i in x: i.method() 我正在尝试为此函数编写单元测试,但我不确
我正在设置一个 MagicMock 实例,使用不同的参数调用相同的方法两次,并将我的断言设置为仅验证一组参数。 Python:3.5.2 from unittest.mock import Magic
我是使用 MagicMock 在 python 中进行单元测试的新手。我有以下代码来断言 python 中正确的方法计数: def methodFoo(self): for booOb
在 Python 中,如果您调用一个不存在的方法,它会抛出一个 AttributeError。例如 >>> class A: ... def yo(self): ...
例如: import mock class MyClass(object): def foo(self, x, y, z): return (x, y, z) class Te
mock( http://mock.readthedocs.org/en/latest/index.html ) 是 python 中用于单元测试的好工具。它可以方便地模拟一个方法或类或字典。但是我遇
我们正在模拟一个 3rd 方模块,它有一个带有许多嵌套实例的大型 api。它的各种对象通常通过属性、get() 或字典索引 [] 访问。拥有一个将所有 3 个都视为简单属性访问的灵活模拟将非常方便。
我们正在模拟一个 3rd 方模块,它有一个带有许多嵌套实例的大型 api。它的各种对象通常通过属性、get() 或字典索引 [] 访问。拥有一个将所有 3 个都视为简单属性访问的灵活模拟将非常方便。
我无法让我的测试按预期运行。我试图模拟两个属性的返回值和一个测试的方法,但我没有得到所需的返回值,而是得到了一个 MagicMock 对象。 我不知道该怎么做。最让我恼火的是,模拟该方法可以按预期工作
我正在尝试为 Readthedocs 自动生成文档。我将一些依赖项模拟为 they suggest in FAQ ,但是从函数的类型注释中,我得到了文档的某些部分,看起来像 Return type:
我是一名优秀的程序员,十分优秀!