学习F#:是否可以创建一个测试用例来验证签名?

时间:2012-10-01 15:00:46

标签: unit-testing f# signature

通过对数百行F#代码进行单元测试,我意识到不仅要检查输出而且要检查签名是有利的。原因是如果代码被验证用于发布,然后在修改签名的发布之后进行更改,则可能想知道签名更改的原因,以便可以为新签名更新测试用例或标记改变导致问题。

是否可以创建测试用例来验证签名?如果是这样,怎么样?

2 个答案:

答案 0 :(得分:2)

我认为最好的方法是简单地提供涵盖签名范围的测试用例。例如,要验证返回类型是int

let x:int = someFunc() //you'll get a compiler error if the return type changes

真的,我希望通过详尽地测试您的公共API,您必须测试签名。尤其是像F#这样的语言,它具有相对严格的静态类型系统。

我想你也可以冒险使用反思来断言签名,但说实话,我认为这不会是一次如此好的时间投入。

答案 1 :(得分:2)

正如斯蒂芬所说,如果你为你的代码编写了一些单元测试,单元测试通常会调用函数所需类型值的函数,这样就会自动检查签名(如果你改变了签名) ,你将无法编译你的测试。)

另一种适用于库的替代方法是使用F#接口文件(.fsi)。接口文件指定了实现文件(.fs)中的公共函数类型,它也是文档的好地方。

如果您(意外)更改了实现的类型,除非您更新接口文件中的类型,否则您的代码将无法编译。

您可能希望手动维护接口文件(有关示例,请参阅F#库源),但您可以通过使用--sig:mylibrary.fsi调用编译器来获取初始值。您可以使用此开关自动执行测试(并在每次编译后检查签名文件之间的差异)。