簡體   English   中英

在unittest`setUp`中部分模擬一個方法

[英]Partially mock a method in unittest `setUp`

我試圖了解模擬/補丁框架,但是有問題。 這是我的簡化代碼:

file_a.py
class A:
  def f(self): 
    b = B()
    b.g()
    b.h()

file_b.py
class B:
  def g(self):
    return network_requests(...)

  def h(self):
    return "This is should not be mocked."

file_test.py
class SomeTests:
  def setUp(self):
    with patch('file_b.B', autospec=True) as mock:
      mock.g.return_value = "Mocked value"
      mock.side_effect = lambda : B()
    self.a = A()

  def test(self):
    self.a.f()

本質上,我只想模擬測試中的Bg ,而不模擬Bh 我從https://docs.python.org/3/library/unittest.mock-examples.html#partial-mocking Bg了一些想法,但是仍然沒有嘲笑Bg

謝謝!

在您鏈接的示例中,關鍵問題是

不幸的是datetime.date用C編寫

這就是為什么您需要模擬模塊並包裝您不想模擬的內容(您不能直接修補C方法)。

是所有其他情況(修補python對象)都可以使用:

with patch('file_b.B.g', autospec=True) as mock_g:
  mock_g.return_value = "Mocked value"

無論如何,請注意您的補丁僅在with上下文中處於活動狀態,從中您可以找到原始參考。 為了更好地控制上下文,您還可以使用裝飾器start()stop()

我強烈建議您仔細閱讀patch以及在何處進行補丁

暫無
暫無

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

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