4

HTF には、テスト フレームワークの使用方法を示すサンプル プロジェクトがあります。モジュール MyPkg.A はいくつかのテストを定義し、MyPkg.B はいくつかのテストを定義します。モジュール A と B からテストを集約する (そして新しいテスト自体を定義しない) 新しいモジュール MyPkg.C を作成することは可能ですか?

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'
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
     ]

TestMain.hs :

{-# OPTIONS_GHC -F -pgmF htfpp #-}
module TestMain where
import Test.Framework
import {-@ HTF_TESTS @-} C

main = htfMain htf_importedTests

これは機能しますが、問題はモジュール名を にハードコーディングする必要があることですC.hsdelegate_テストを別の に委任できる新しいテスト定義ステートメントを導入して、単一のテストとしてTestableHTFエクスポートできるようにすることをお勧めします。htf_importedTestsおそらく、問題に対するその解決策または別の解決策の機能要求を開くことができます。

于 2012-12-26T23:05:46.243 に答える