簡體   English   中英

unittest.mock:在指定的模擬 object 上設置自定義屬性(變量)

[英]unittest.mock: Set custom attribute (variable) on specced mock object

我正在嘗試從另一個庫的 class mock現有的 object ,以使用pytest進行單元測試。 但是,來自其他庫的屬性(不是方法)大多是在運行時設置的。

我想要達到的目標

  • 獲得 mocking 和 object spec的所有好處
  • 設置我的單元測試所需的(嵌套)屬性(不是方法),以模擬它們是在 object 創建期間設置的
from unittest.mock import Mock
from otherlib import ClassName

def test_stuff():
    mock_object = Mock(spec=ClassName)
    mock_object.data.outward.key = 12345

    assert mock_object.data.outward.key == 12345  # AttributeError: Mock object has no attribute 'data'

我在代碼更改中進行了這些嘗試,但沒有成功

...
def test_stuff():
    mock_object = Mock(spec=ClassName, **{'data.outward.key': 12345})

    assert mock_object.data.outward.key == 12345
...
def test_stuff():
    mock_object = Mock(spec=ClassName)
    attrs = {'data.outward.key': 12345}
    mock_object.configure_mock(**attrs)

    assert mock_object.data.outward.key == 12345

我想出的最好的方法是使用另一個Mock object來設置main mock object's屬性。 它有效,但我想有一個更好的解決方案......?

from unittest.mock import Mock
from otherlib import ClassName

def test_stuff():
    mock_data = Mock(spec=["outward"], key=12345)
    mock_object = Mock(spec=ClassName, data=mock_data)
    mock_object.data.outward.key = 12345

    assert mock_object.data.outward.key == 12345  # tests.py::test_stuff PASSED [100%]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM