【发布时间】:2012-05-31 20:17:24
【问题描述】:
在 F# 中,我想对具有多个嵌套函数级别的函数执行单元测试。 我也希望能够单独测试嵌套函数,但我不知道如何调用它们。 在调试的时候,这些嵌套函数中的每一个都作为函数对象的一种类型被调用,但是我不知道我是否可以在编译时访问它们。
我不想更改我正在使用的嵌套方案,因为以这种方式嵌套它们在功能上最有意义,因为在每个嵌套级别都有一些函数参数的事实上的“继承”。
这样的事情可能吗?如果不是,单元测试嵌套函数的一般程序是什么?它们是否使用额外的参数单独测试,然后插入到它们的嵌套位置后词中,永远无法再次测试?
非常小的例子:
let range a b =
let lower = ceil a |> int
let upper = floor b |> int
if lower > upper then
Seq.empty
else
seq{ for i in lower..upper -> i}
如何在不改变代码嵌套性质的情况下测试 lower 或 upper 是否正常工作?
【问题讨论】:
-
+1 不可能,但我很想看到建议的解决方法。 :-]
-
如果
range工作正常,你难道不能假设lower和upper也能正常工作吗? -
@Daniel,这是一个简单的例子。实际上,这不是一个很好的方法,因为 lower 和 upper 并没有真正绑定到函数中。但是,如果有一个更复杂的例子,嵌套的辅助函数本身可能非常复杂,因此应该与整个包含函数分开进行测试。
-
@mattgately 您可能想重新审视“单元测试”一词中“单元”的定义。如果有问题的单元是一个函数,那么你不是在测试内部功能——你是在测试函数。我的意思是,如果您需要测试 lower 和 upper(或它们的一些类似物),请让它们成为自己的独立代码单元。
-
实际上它们是独立的单元:
ceil和floor。它们是标准库的一部分。无需在您身边进行测试。
标签: unit-testing testing f# functional-testing