2015-10-16 2 views
3

Скажем, у меня есть подпись SML ALPHA. Но у меня также есть несколько структур/функторов alpha1, alpha2 и т. Д., Которые я хочу использовать с ALPHA.SML-подпись с несколькими структурами

Мой вопрос в том, что если бы у меня была структура, выполняющая модульное тестирование вне этих модулей, как бы я только протестировал подпись 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 

ответ

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 
Смежные вопросы