簡體   English   中英

模擬調用具有不同類的類構造函數

[英]Mock calls to class constructor with different class

我有以下課程:

    class A(object):
      def __init__(self):
          self.inner_class = B()
      def foo():
          self.inner_class.bar()

    class B(object):
      def bar():
          return 'No'

    class C(object):
      def bar():
          return 'Yes'

我想模擬這樣,而不是調用B的構造函數,而是得到一個C對象。

@patch(...something....)
def test_get_yes(self):
    A().foo() # Expected output is 'Yes'

我該怎么做?

我知道我可以編寫以下測試,但我不願意:

def test_get_yes(self):
    a = A()
    a.inner_class = C()
    a.foo() # Expected output is 'Yes'

您需要模擬的是A.__init__.__globals__ B的條目。

假設一組類定義與您的問題中出現的稍有不同:

class A(object):
    def __init__(self):
        self.inner_class = B()
    def foo(self):
        return self.inner_class.bar()

class B(object):
    def bar(self):
        return 'No'

class C(object):
    def bar(self):
        return 'Yes'

然后,以下應該工作:

@patch.dict(A.__init__.__globals__, {'B': C})
def test_get_yes():
    print(A().foo())

test_get_yes()  # Outputs yes, not no

暫無
暫無

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

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