假设我有一个 SML 签名 ALPHA。但我也有多个结构/仿函数 alpha1、alpha2 等,我希望与 ALPHA 一起使用。
我的问题是,如果我有一个在这些模块之外执行单元测试的结构,我将如何单独测试 ALPHA 签名而不必指定我正在使用的结构?
为了正确看待事情,这里有一些代码:
signature ALPHA =
sig
val func1
val func2
end
structure alpha1 :> ALPHA =
struct
fun func1 = (* Implementation *)
fun func1 = (* Implementation *)
end
functor alpha2 (D: DATA) :> ALPHA =
struct
fun func1 = D.x
fun func2 = D.y
end
(** Unit testing module **)
structure Tester =
struct
(** What test cases do I put here? **)
end
最佳答案
您可以使 Tester
成为一个仿函数,将带有签名 ALPHA
的结构作为输入。例如:
signature TESTSUITE =
sig
val tests : bool list
end
functor AlphaTester (Alpha : ALPHA) :> TESTSUITE =
struct
val func1_test_1 = Alpha.func1 ... = expected1
val func2_test_2 = Alpha.func2 ... = expected2
val tests = [ func1_test_1
, func2_test_1 ]
end
structure Alpha1Tester = AlphaTester(Alpha1)
structure Alpha2Tester = AlphaTester(Alpha2(SomeD))
structure AllTests :> TESTSUITE =
struct
val tests = AlphaTester1.tests @ AlphaTester2.tests
end
关于unit-testing - 具有多种结构的 SML 签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33163874/