unit-testing - 具有多种结构的 SML 签名

标签 unit-testing functional-programming sml smlnj

假设我有一个 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/

相关文章:

c# - 如何使用 Moq 测试没有返回值的方法?

java - 具有可变参数的消费者

sml - 如何在SML中操作元组列表?

recursion - 在 SML 中创建不超过给定 n 值的素数列表

java - 如何覆盖单元测试中被测试类调用的方法

java - 使用可注入(inject)单例

c# - 此测试中的多个断言是否错误?

haskell - 是否有一个 Monad 收集结果和 `mappend` s 它们?

haskell - Haskell 中的空间泄漏

SML 运算符和操作数不一致