如何在python中模拟方法的默认值?

2024-06-16 13:14:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个类,其方法实例化了第二个类的元素:

class FirstClass:

    def method_one():
        second_class = SecondClass()

第二个类有一个带有默认参数的方法:

class SecondClass:
    def method_two(important_date: datetime.date = get_today())

以及不同文件date_service中的函数get_today

def get_today() -> datetime.date:
    return datetime.date.today()

我正在一个test_first_class.py中测试method_one,我没有设法模拟get_today()的值

我在SO中查看了几页和解决方案,但无法修复。其中一些想法:

  • 我试过了,但还是在排队
with patch.object(build_url, 'func_defaults', ('domain',)):

我不知道我要说什么。我尝试了类似于SecondClass.method_two的东西,但它不起作用

备注:我知道一个好的单元测试应该独立地测试FirstClassSecondClass,并在test_first_class.py中模拟method_two,但由于某些原因,我不能这样做:-(


Tags: 方法pytestgettodaydatetimedatedef
1条回答
网友
1楼 · 发布于 2024-06-16 13:14:26

我最终通过以下操作解决了问题:

@staticmethod
@patch('date_service.get_today', Mock(return_value=mock_today))
def test_something():
    importlib.reload(second_class)
    importlib.reload(first_class)
    first_class_element = FirstClass()
    whatever = first_class_element.method_one()
    assert (...)

其中second_classfirst_class分别包含SecondClassFirstClass;今天是我用来模拟的日子

注意:您需要重新加载这两个类,并且按照这个顺序重新加载,否则它将无法工作

备注:根据@Klaus D.comment,我最终无法使用get_today()作为默认可选参数,我也不必使用所有这些乱七八糟的参数,但如果有人需要,我会给出答案

相关问题 更多 >