gpt4 book ai didi

Python单元测试模拟: Is it possible to mock the value of the __init__'s default arguments at test time?

转载 作者:行者123 更新时间:2023-12-01 09:24:02 25 4
gpt4 key购买 nike

我想通过在单元测试期间替换默认参数的值来测试使用默认参数创建的类。

例如,我想要以下行(整个代码)
obj = SomeClass()

看起来像是使用参数调用的


obj = SomeClass(overiden_parameter)

一种解决方案可能是创建简单的子类:

```def OriginalClass(对象):

def __init_(some_param="default_value"):
...

```

```def MockedOriginalClass(OriginalClass):

def __init_():
super(MockedOriginalClass, self).__init__("some_other_value)
...

```

如何在整个代码中模拟/修补 OriginalClassMockedOriginalClass ?请记住,我确实想保留原始类的功能,我想要更改的唯一一件事是它的默认 __init__ 参数。

我觉得这对于 Mocking 来说是一件非常简单的事情,我只是不太清楚如何做到这一点。

我发现了这个问题: Python unittest mock: Is it possible to mock the value of a method's default arguments at test time?

非常接近,但我认为同样的技巧不能应用于 __init__ 方法。

最佳答案

实现此目的的一种方法是为您的特定测试模拟整个类,如下所示:

示例:我有一个类 SomeClass 我想模拟。我的模拟类名称是 MockSomeClass ,它将模拟 SomeClass 类。

class MockSomeClass(SomeClass):
'''
Mock Class
'''
def __init__(overiden_parameter):
self.overiden_parameter = overiden_parameter

因此在测试过程中,您将使用具有重写功能的模拟类,而其他函数的行为将保持不变(继承)。

修补

mock_some_class_obj = MockSomeClass()

@mock.patch('SomeClass', return_value=mock_some_class_obj)
def test1(self, mock_some_class_obj):
'''
Test 1
'''
obj = SomeClass()

catch 因此,每当您创建 SomeClass 的对象时,代码中都会返回模拟类的对象。在模拟类中,您可以添加自己的功能。

关于Python单元测试模拟: Is it possible to mock the value of the __init__'s default arguments at test time?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50589552/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com