2012-08-02 109 views
4

使用模板haskell,有沒有辦法列出範圍內的所有函數?類似於使用模板haskell獲取範圍內的所有函數/值

allVarsInScope :: Q [Name] 

我想要做的是獲取所有以test_開頭的導入函數列表,並自動運行測試。

+0

[Test.QuickCheck.All](http://hackage.haskell.org/packages/archive/QuickCheck/2.4.1.1/doc/html/Test-QuickCheck-All.html)如果您的測試是QuickCheck屬性。 – 2012-08-02 07:12:29

+0

它不跨越模塊邊界。 – 2012-08-02 11:24:02

+0

用於自動測試運行[見HTF項目](http://hackage.haskell.org/package/HTF)。它確實相當驚人。 – 2013-10-30 18:52:11

回答

2

不幸的是,在模板Haskell中沒有這樣的反射能力,但有一些解決方法。然而,在自己寫這樣的東西之前,我建議嘗試使用test-framework-th軟件包,它已經用於從case_開始的HUnit測試以及以prop_開頭的QuickCheck屬性。

這個包使用了language-haskell-extract包,它基本上在模塊上運行它自己的解析過程來挑選出定義。這是一個有點冒失的解決方案,但它在實踐中效果不錯。但是,它確實帶來了相當數量的依賴關係,額外的解析過程可能會降低構建速度。

+0

如果我可以幫助它,我寧願不在構建時使用測試重新解析每個模塊。 – 2012-08-02 11:24:28