4

HTF 有一个示例项目,展示了如何使用测试框架。模块 MyPkg.A 定义了一些测试,MyPkg.B 定义了一些测试。是否可以编写新模块 MyPkg.C 来聚合来自模块 A 和 B 的测试(并且不定义新测试本身)?

我不想从 A 和 B (在我的测试运行程序 Main 模块中)导入测试,而是从单个 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'
4

1 回答 1

3

HTF 似乎并不直接支持这种操作模式。但是,您可以通过一些骇客来实现目标:

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
     ]

测试主.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作为单个测试导出。也许您可以针对该问题或不同的解决方案打开功能请求。

于 2012-12-26T23:05:46.243 回答