我有一个词法分析器,并希望针对一组已知良好的测试用例进行测试。它们保存在子目录 ./ test_src / 中,每个目录都有一个扩展名 testname .txt
我想做的是获取所有相关测试用例的路径:
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
我的方法似乎是失败的,这似乎首先需要以下函数,然后映射其结果:
unableToDoThis :: IO [FilePath] -> [IO FilePath]
我非常怀疑我所遵循的方法是不可能的,因为它似乎需要逃避IO Monad,所以我要问的是:
答案 0 :(得分:4)
通常如果你在参数中得到IO a
个值,那么你可能做错了。 testMyLexer
和myTest
都可以是纯粹的,因此不是
testMyLexer :: IO FilePath -> Assertion
myTest :: [IO FilePath] -> Test
DO
testMyLexer :: FilePath -> Assertion
myTest :: [FilePath] -> Test
然后,只需使用getTestFiles
中的绑定来提取[FilePath]
:
do
files <- getTestFiles
runTestTT $ myTest files