如何对函数内的变量/值进行单元测试?
这是关于单元测试(我正在使用 pytest)的一个相当基本的问题,即我想确保我的所有代码都按预期运行。
一定有一个正确的方法可以做到这一点,但我没有找到。到目前为止,我尝试将代码拆分为尽可能多的函数,以获得可以测试的尽可能多的返回值。但我无法在这些函数内部进行测试。
这里我只能测试返回值interp_function
是否按预期工作,但无法测试其余代码。
def multidim_interp_function(grid = None, max_error_in_mm=1,
max_error_in_deg=1):
def interp_function(array_of_pts):
fct_list = create_interp(grid)
max_error = [max_error_in_mm]*3
if len(grid) == 6:
max_error.extend([max_error_in_deg]*3)
return np.column_stack([error*fct_list[i](array_of_pts) for i,error in enumerate(max_error)])
return interp_function
最佳答案
您不需要测试函数的实现。如果您在函数中编写了 foo = 'bar'
,则无需测试 foo
是否已正确分配了值 'bar'
;你可以期望它能起作用。通过单元测试,您希望变得更抽象一步。您想要检查您的函数 multidim_interp_function
是否在给定一些已知输入的情况下返回正确的结果。像对待 Python 中的其他函数一样对待该函数:您不会编写单元测试来弄清楚 max()
内部如何工作,而是编写一个测试来断言 max(3, 4)
返回值 4
。
测试函数的“内部结构”不仅不切实际,而且函数的内部结构可能会发生变化。如果您正在编写单元测试并且发现代码中存在一些错误,那么您将更改代码。或者您稍后可能会回来重构内部结构以提高它们的效率,或者删除模块中的某些代码,或者其他什么。您不想每次都重写单元测试。因此,您不应该将单元测试编写得过于具体。您的单元测试应该测试函数的公共(public)接口(interface)(参数和返回值),这样您就可以确保即使您移动该接口(interface)也不会改变(即函数继续表现相同)一些代码。如果通过单元测试或其他方式发现函数内部存在一些不当行为,那么您可以使用调试器介入并一一确认每个语句以查找问题所在。
要进入正确的心态,请尝试 Test-Driven Development ,首先编写测试,本质上决定函数应该如何表现,然后实现函数内部,同时能够测试您的实现是否符合预期。 p>
关于python - 如何在 Python 函数内正确地对代码进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58788214/