2015-10-16 59 views
3

假设我有一个SML签名ALPHA。但我也有多个结构/函子alpha1,alpha2等,我希望与ALPHA一起使用。我的问题是,如果我有一个结构在这些模块之外执行单元测试,我将如何单独测试ALPHA签名而不必指定我正在使用的结构?具有多种结构的SML签名

为了把事情的角度,这里是一些代码:

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 

回答

1

你会做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