gpt4 book ai didi

unit-testing - 测试采用空列表的函数

转载 作者:行者123 更新时间:2023-12-04 04:44:36 27 4
gpt4 key购买 nike

我正在尝试为接受一个列表并返回它的简单函数编写一个单元测试,

func :: [a] -> [a]
func x = x

使用测试代码来测试它在给定一个空列表时是否按预期工作

emptyListTest :: Test
emptyListTest = TestCase $ assertEqual "for (func [])," [] $ func []

main :: IO Counts
main = runTestTT $ TestList [emptyListTest]

但是,我得到了错误

No instance for (Show a0) arising from a use of `assertEqual'
The type variable `a0' is ambiguous
Possible fix: add a type signature that fixes these type variable(s)
Note: there are several potential instances:
instance Show Double -- Defined in `GHC.Float'
instance Show Float -- Defined in `GHC.Float'
instance (Integral a, Show a) => Show (GHC.Real.Ratio a)
-- Defined in `GHC.Real'
...plus 28 others
In the expression: assertEqual "for (func [])," []
In the second argument of `($)', namely
`assertEqual "for (func [])," [] $ func []'
In the expression:
TestCase $ assertEqual "for (func [])," [] $ func []

其他使用非空列表的测试工作正常,并且通过在 ghci 中调用 func [] 手动测试时该函数工作正常。

我还注意到,如果我创建一个虚拟类型,并制作一个包含该类型元素的列表(如果这是正确的说法),那么将其传递给测试似乎可行,并且测试通过

data Dummy = Dummy
deriving(Eq, Show)

emptyList :: [Dummy]
emptyList = []

emptyListTest :: Test
emptyListTest = TestCase $ assertEqual "for (func [])," [] $ func emptyList

这是为什么?有没有一种方法可以在不走虚拟类型路线的情况下使用空列表测试函数?

最佳答案

好吧,这个错误告诉你到底出了什么问题。阅读它。

 The type variable `a0' is ambiguous

所以,输入你的变量!除非您知道,否则 GHC 不可能知道要使用什么类型进行测试。

emptyListTest = TestCase $ assertEqual "for (func [])," [] $ func ([] :: [Int])

您可能必须启用扩展程序才能内联执行此操作。

关于unit-testing - 测试采用空列表的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26745384/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com