簡體   English   中英

Haskell測試框架(HTF)和多個模塊中的測試定義

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM