2010-12-05 70 views
6

我希望能够采取一个文件,宣言,如:获取模板haskell中的对象名称列表?

test_1 = assert $ 1 == 1 
test_2 = assert $ 2 == 1 

,并生成一个基本的运行功能像

main = runTests [test_1, test2] 

的目标是要达到这样的Python的nosetest。

我可以用模板Haskell做这个吗?我找不到很多文档(Wiki中有很多断开的链接)。

+0

你需要什么模板Haskell在这里? `runTests`是一个完美的普通函数;是能够编写`$(runTestsInModule“My.Module”)并产生`runTests [test_1,test_2,...]`的想​​法吗? – 2010-12-05 21:18:38

+1

是的! runTestsInModule是一个存在的函数还是我需要编写它?如果不是,那是我想知道如何写的功能。 – luispedro 2010-12-05 21:22:35

回答

4

您可能想要查看test-framework软件包系列。特别是,test-framework-th软件包提供了模板Haskell功能defaultMainGenerator,只要您按照case_和QuickCheck属性prop_的前缀HUnit测试用例的惯例,它就完全符合QuickCheck和HUnit测试的要求。

{-# LANGUAGE TemplateHaskell #-} 

import Test.Framework.Providers.HUnit 
import Test.Framework.Providers.QuickCheck2 
import Test.Framework.TH 

import Test.HUnit 
import Test.QuickCheck 

main = $(defaultMainGenerator) 

case_checkThatHUnitWorks = 
    assert $ 1 == 1 

prop_checkThatQuickCheckWorks = 
    (1 == 1) 
4

还有一种方法,你不必使用模板haskell。 haskell-src-exts可以解析Haskell,你可以从中提取。

或者,如果你的目的是可行的,可以作出这样quickcheck,做一个头脑简单的解析,即寻找与prop_在0。这是真正的工作完全适当的解决方案列开始的标识符,尽管它可能是理论上不令人满意。