2010-12-05 73 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。這是真正的工作完全適當的解決方案列開始的標識符,儘管它可能是理論上不令人滿意。