簡體   English   中英

如何使用 pytest 模擬返回另一個 class 對象的 class 方法?

[英]How to mock a class methods that return another class objects with pytest?

我有一個具有多種方法的ClassA ,其中一種方法返回ClassB的 object ,其中 class B 有自己的方法

我的文件1.py:

from b import ClassB

class ClassA(object):

    def method_1(self):
        f = ClassB()
        return f.method_a()

    def method_2(self):
        ...
        return ...

    def method_n(self):
        ...
        return ...

我的文件2.py:

class ClassB(object):

    def __init__(self):
        self.var1 = "something"

    def method_a(self):
        return self.var1

    def method_b(self):
        return ...
      
    ...

    def method_z(self):
        return ...

在測試 function 中,我試圖模擬所有ClassA方法的返回值,包括啟動ClassBmethod_1

我的文件3.py:

from myfile1 import ClassA

class ClassC(object):
    
    def __init__(self):

    self.a = ClassA()

有人可以解釋一下修補和模擬 Class A 和 B 的正確方法是什么嗎?

如果我們想模擬從method_1method_nClassA返回值的每個方法,並使模擬值可被其他測試函數重用,那么正確的方法是什么,因為下面的方法會使測試 function 太長且不可重用:

@patch("myfile3.ClassA")
    def test1(mock_class_a):
        mock_class_a().method_1.return_value = "abc"

創建一堆模擬類並使用它們

#./something/__init__.py
class X:
   def get_class_thing(self):
       return "not abc"

#./tests/tests.py
from unittest.mock import Mock,patch
class MyMock:
      get_class_thing = Mock(return_value="abc")
      method_2 = Mock(return_value="abc")

@patch('something.X',return_value=MyMock)
def test_it(patched):
   from something import X
   assert X().get_class_thing() == "abc"

暫無
暫無

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

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