haskell - 我如何轻松地表达我不关心特定数据字段的值?

标签 haskell hspec

我正在为我的解析器编写测试,使用的方法可能不是最好的,但到目前为止一直对我有用。测试假设每个代码块都完美定义了 AST 表示,如下所示:

(parse "x = 5") `shouldBe` (Block [Assignment [LVar "x"] [Number 5.0]])

然而,当我转向更复杂的案例时,出现了对更“模糊”验证的需求:

(parse "t.x = 5") `shouldBe` (Block [Assignment [LFieldRef (Var "t") (StringLiteral undefined "x")] [Number 5.0]])

我在这个例子中放入了 undefined 来展示我不想与解析结果进行比较的字段(它是字符串文字的源位置)。现在,我看到的唯一修复方法是重写代码以使用 shouldSatisfy 而不是 shouldBe,如果我找不到,我将不得不这样做任何其他解决方案。

最佳答案

您可以编写一个 normalizePosition 函数,用一些固定的 dummyPosition 值替换 AST 中的所有位置数据,然后使用 shouldBe从相同的虚拟值构建的模式。

如果 AST 非常复杂,请考虑使用 Scrap-Your-Boilerplate 编写此规范化。

关于haskell - 我如何轻松地表达我不关心特定数据字段的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25889388/

相关文章:

haskell - Aeson 或 Wai.JSON QuasiQuoter 的问题 -- 将 0.0 转换为 0

unit-testing - 在测试期间访问由 `beforeAll` 设置的值

haskell - 将 Either a (IO b) 转换为 IO (Ei a b)

haskell - 如何使用 Pragma 依赖项在 ghci 中正确定义数据类型?

haskell - 使用 Hspec 测试用户输入

haskell - HSpec 中的多个 before 函数?

在 Haskell 中对惰性表达式中未定义的值进行单元测试

映射中的 Haskell 错误

haskell - 详尽定义的功能中的非详尽模式

haskell - 声明参数化类型同义词的实例