Python:测试function/method签名是否改变的正确方法

Python: Correct way to test whether function/method signature has changed

我目前正在开发一个应用程序 (my_app),它使用来自另一个 python 包 (internal_package) 的逻辑,该包正在并行开发。

假设我在我的代码中使用了 internal_package 中的函数 func1。在internal_package中是这样定义的:

def func1(a, b):
    # do something
    ...

但是,如果 func1 的函数签名(即调用函数的参数)发生变化,可以说

def func1(a, b, c):
    # do something
    ...

我的代码当然会引发异常,因为我没有传递参数 c

为了立即意识到这一点,我想在 pytest 中编写一个测试。在我的理解中,这种测试不是单元测试,而是集成测试。

我的方法是这样的:

import inspect
import internal_package

def test_func1_signature():
    expected_signature = ?  # not sure how to correctly provide the expected signature here
    actual_signature = inspect.signature(internal_package.func1)
    
    assert actual_signature == expected_signature

我希望这是一个常见问题,但我找不到任何相关内容。 执行此类测试的最 pythonic 方法是什么?

如果有人感兴趣,我最终使用了内置 inspect 库中的 getfullargspec。在 documentation 它说:

Get the names and default values of a Python function’s parameters. A named tuple is returned: FullArgSpec(args, varargs, varkw, defaults, kwonlyargs, kwonlydefaults, annotations)

因为我对 args 部分感兴趣,所以我从 func1 中检索它们如下:

inspect.getfullargspec(func1)[0]

然后 returns ['a', 'b']。然后我可以像这样在 pytest 中编写一个简单的测试:

import pytest
import inspect

def test_func1_signature:
    expected_signature = ['a', 'b']  # I specify what i expect

    actual_signature = inspect.getfullargspec(func1)[0]

    assert actual_signature == expected_signature 

如果有人知道 better/more pythonic/more 正确的方法,请告诉我。