GitHub Autograder Tasty 处理写入异常

问题描述 投票:0回答:1

我正在 Tasty 中为 GitHub 的自动评分器对以下 Haskell 函数进行单元测试:

countLetters :: IO [Int]
countLetters = do 
               putStr "First entry: "
               x <- getLine
               putStr "Second entry: "
               y <- getLine
               putStr "Third entry: "
               z <- getLine
               return [length x, length y, length z]

使用以下自动评分代码:

testCase "test_countLetters" $ do
         h <- openFile "/dev/null" ReadMode
         hDuplicateTo h stdin
         
         hPutStrLn stdin "Haskell Is Fun"
         result <- countLetters
         hClose h
         assertEqual "Count Letters" [7,2,3] result

我将该文件添加到“autograding.json”文件中,现在收到以下错误:

Exception: <stdin>: hPutStr: illegal operation (handle is not open for writing)

根据我(新手)的理解,关闭句柄意味着文件无法接受输入或输出,因此会出错。我将“ReadMode”切换为“WriteMode”,这也给出了一个错误,由于未打开句柄进行读取,因此无法调用 hGetLine。

unit-testing github haskell io
1个回答
0
投票

您正在尝试写入

stdin
,这是一个输入流,因此您无法写入它。

© www.soinside.com 2019 - 2024. All rights reserved.