繁体   English   中英

使用加法赋值进行模拟(Mocking bytes() 模块)

[英]Mocking with addition assignment (Mocking bytes() module)

我有一个程序如下


data = bytes()
 ...
 
new_data = bytes()
 ...

data += new_data
print(data)

所以我相应地模拟了字节以及__iadd__调用,如下所示:

@unittest.mock.patch('file_name.bytes')
def test(self, mock_bytes):
   mock_bytes.__iadd__.return_value = mock_bytes
   ...

据我了解,应该返回bytes()的 MagicMock,但我得到的是bytes().__iadd__()的 MagicMock。

我将不胜感激有关此事的任何帮助:)

PS 还尝试了诸如mock_bytes()mock_bytes().__iadd__()或任何其他变体之类的变体。

简而言之,模拟按预期工作。 要覆盖data += new_data你应该有这样的语法: mock_bytes.return_value.__iadd__.return_value = "the value which is printed"

关于模拟语法的说明:您通常可以将.return_value替换为() ,因此mock_bytes.return_value.__iadd__.return_value = "the value which is printed"等效于mock_bytes().__iadd__.return_value = "the value which is printed"

现在,至于为什么首先需要() / .return_value

  • 模拟与实现相关 - 它们模仿调用的函数。 因此,如果您想更改以下行中data变量的值: data = bytes()您正在更改函数bytes的返回值 您确定调用了 iadd 是正确的,并且您想再次更改返回值。
  • 然后你有调用的连接/链接:你正在调用字节,然后在返回的 object 上应用 iadd 所以你有这个语法: mock_bytes.return_value.__iadd__.return_value = "the value which is printed"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM