我希望能够采取一个文件,宣言,如:获取模板haskell中的对象名称列表?
test_1 = assert $ 1 == 1
test_2 = assert $ 2 == 1
,并生成一个基本的运行功能像
main = runTests [test_1, test2]
的目标是要达到这样的Python的nosetest。
我可以用模板Haskell做这个吗?我找不到很多文档(Wiki中有很多断开的链接)。
我希望能够采取一个文件,宣言,如:获取模板haskell中的对象名称列表?
test_1 = assert $ 1 == 1
test_2 = assert $ 2 == 1
,并生成一个基本的运行功能像
main = runTests [test_1, test2]
的目标是要达到这样的Python的nosetest。
我可以用模板Haskell做这个吗?我找不到很多文档(Wiki中有很多断开的链接)。
您可能想要查看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)
还有一种方法,你不必使用模板haskell。 haskell-src-exts可以解析Haskell,你可以从中提取。
或者,如果你的目的是可行的,可以作出这样quickcheck
,做一个头脑简单的解析,即寻找与prop_
在0。这是真正的工作完全适当的解决方案列开始的标识符,尽管它可能是理论上不令人满意。
你需要什么模板Haskell在这里? `runTests`是一个完美的普通函数;是能够编写`$(runTestsInModule“My.Module”)并产生`runTests [test_1,test_2,...]`的想法吗? – 2010-12-05 21:18:38
是的! runTestsInModule是一个存在的函数还是我需要编写它?如果不是,那是我想知道如何写的功能。 – luispedro 2010-12-05 21:22:35