HTF有sample project,展示了如何使用测试框架。模块MyPkg.A定义了一些测试,MyPkg.B定义了一些测试。是否有可能编写新的模块MyPkg.C,它聚合了模块A和B的测试(并没有自己定义新的测试)?
我没有从A和B导入测试(在我的测试运行器主模块中),而是想从单个C模块导入测试。
我像这样实现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'
答案 0 :(得分:3)
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
导出为单个测试。也许您可以针对该问题打开功能请求或不同解决方案。