2013-05-08 93 views
0

我有一個詞法分析器,並希望針對一組已知的良好測試用例進行測試。這些子目錄中的./test_src/舉行,每個人都有一個擴展測試名 .TXT使用文件相關測試進行HUnit測試

我希望做的是得到的路徑給所有相關的測試案例:

getTestFiles :: IO [FilePath] 
find always (extension ==? ".txt") "/path/to/test_src/" 

並創建包含HUnit的TestCases一個HUnit TestList每個經由函數沿

testMyLexer :: IO FilePath -> Assertion 

線創建的斷言沿

myTest :: [IO FilePath] -> Test 
myTest = TestList $ fmap TestCase $ fmap testMyLexer 

,我好像在我的做法被failng線的東西是,這似乎首先要求follwoing功能,然後在其結果映射:

unableToDoThis :: IO [FilePath] -> [IO FilePath] 

我有一個強烈的懷疑,我下面的辦法是不可能的,因爲它似乎需要逃避IO單子,所以我要問的是:

  1. 是這種方法可行,如果是這樣我失去了什麼?
  2. 如果不是,你會如何去解決這個問題?它必須是很常見的,以避免在所有測試用例

回答

4

通常,如果你在參數包裹IO a值硬編碼那麼你很可能做錯了什麼。無論testMyLexermyTest可以是純,所以不是

testMyLexer :: IO FilePath -> Assertion 
myTest :: [IO FilePath] -> Test 

testMyLexer :: FilePath -> Assertion 
myTest :: [FilePath] -> Test 

然後,它只是一個使用綁定從getTestFiles提取的事你[FilePath]

do 
    files <- getTestFiles 
    runTestTT $ myTest files