【发布时间】:2021-04-28 09:51:08
【问题描述】:
我目前正在开发一个应用程序 (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 方式是什么?
【问题讨论】:
-
你为什么不用 2 个参数来调用它?
-
你的意思是
internal_package.func1(a=1,b=2)作为test_func1_signature()-Test函数的唯一内容?没有assert- 声明?在这种情况下,想法是如果签名发生更改,则会引发错误,否则不会发生任何事情(即测试成功)。对吗? -
问题:假设
a、b和c是例如数据帧。如果我只是调用它,我需要有效的数据帧a、b和c进行测试,以免引发任何错误。但是,我只想测试func1的参数是否被称为a和b(如果给定c)并且在这种情况下没有任何默认值
标签: python unit-testing pytest integration-testing