[英]Haskell Test Framework (HTF) and test definitions in multiple modules
HTF有一個示例項目 ,展示了如何使用測試框架。 模塊MyPkg.A定義了一些測試,MyPkg.B定義了一些測試。 是否有可能編寫新的模塊MyPkg.C,它聚合了模塊A和B的測試(並沒有自己定義新的測試)?
我想從單個C模塊導入測試,而不是從A和B導入測試(在我的測試運行器主模塊中)。
我像這樣實現MyPkg.C
{-# OPTIONS_GHC -F -pgmF htfpp #-}
module MyPkg.C (htf_importedTests) where
import Test.Framework
import {-@ HTF_TESTS @-} MyPkg.A
import {-@ HTF_TESTS @-} MyPkg.B
我的主要測試運行器模塊如下:
{-# OPTIONS_GHC -F -pgmF htfpp #-}
module Main where
import Test.Framework
import Test.Framework.BlackBoxTest
import {-@ HTF_TESTS @-} MyPkg.C
main = htfMain htf_importedTests
當我嘗試編譯此代碼時,出現錯誤:
TestMain.hs:23:5:
Not in scope: `htf_MyPkg_C_thisModulesTests'
Perhaps you meant `htf_Main_thisModulesTests'
HTF似乎不直接支持這種操作模式。 但是,您可以通過一些hackery實現目標:
A.hs
{-# OPTIONS_GHC -F -pgmF htfpp #-}
module A where
import Test.Framework
funA :: Int -> Int
funA x = x + 1
test_funA = assertEqual (funA 41) 42
B.hs
{-# OPTIONS_GHC -F -pgmF htfpp #-}
module B where
import Test.Framework
funB :: Int -> Int
funB x = x + 1
test_funB = assertEqual (funB 41) 42
C.hs
module C where
import Test.Framework.TestManager
import A
import B
htf_C_thisModulesTests =
makeAnonTestSuite $ map testSuiteAsTest
[ htf_A_thisModulesTests
, htf_B_thisModulesTests
]
TestMain.hs :
{-# OPTIONS_GHC -F -pgmF htfpp #-}
module TestMain where
import Test.Framework
import {-@ HTF_TESTS @-} C
main = htfMain htf_importedTests
這有效,但問題是我們必須在C.hs
對模塊名稱進行硬編碼。 我認為一個好主意是引入一個新的delegate_
測試定義語句,允許您將測試委托給另一個TestableHTF
,以便我們可以將htf_importedTests
導出為單個測試。 也許您可以針對該問題或該問題的不同解決方案打開功能請求。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.