函数隐私和单元测试 Haskell

2024-03-27

你如何处理 Haskell 中的函数可见性和单元测试?

如果导出模块中的每个函数以便单元测试可以访问它们,则可能会导致其他人调用不应出现在公共 API 中的函数。

我想用{-# LANGUAGE CPP #-}然后围绕出口#ifdef:

{-# LANGUAGE CPP #-}

module SomeModule
#ifndef TESTING
( export1
, export2
)
#endif
where

有没有更好的办法?


通常的约定是将模块分为公共部分和私有部分,即

module SomeModule.Internal where

-- ... exports all private methods

然后是公共API

module SomeModule where (export1, export2)

import SomeModule.Internal

然后就可以导入了SomeModule.Internal在测试和其他需要访问内部实现的地方。

这个想法是你的图书馆的用户永远不会偶然调用私有API,但是他们can如果知道他们在做什么(调试等),请使用它。与强制隐藏私有 API 相比,这极大​​地提高了库的可用性。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

函数隐私和单元测试 Haskell 的相关文章

  • Haskell Servant 和流媒体

    我正在尝试添加一个功能到我的servant服务器将从 Amazon S3 获取文件并将其流式传输回用户 由于文件可能很大 我不想将它们下载到本地然后将它们提供给客户端 我宁愿将它们直接从 S3 流式传输到客户端 I use Amazonka
  • XMonad 在不同工作区启动

    我想在 xmonad start 上启动不同工作区中的一些应用程序 这很重要 所以 我写了以下内容startupHook startupApps String startupApps konsole emacs firefox gvim k
  • 找不到方法的私有访问器

    在 Visual Studio 2010 下使用上下文菜单生成新的单元测试时 右键单击方法名称 gt 生成单元测试 我收到此错误 Private Accessor for methodName is not found Please reb
  • 使用 SimpleHTTPServer 进行单元测试

    我正在编写一个 Python 模块 它封装了某个 Web 服务 API 这一切都是 REST 因此实施起来相对简单 然而 在单元测试方面我发现了一个问题 由于我不运行我为其创建此模块的服务 我不想对它们进行锤击 但同时 我需要检索数据来运行
  • 如何在 Windows 7 中配置 cabal?

    我已经在Windows 7中安装了Haskell Platform 2012 我在控制台中编写cabal update我收到消息说有新版本的阴谋集团 我写的cabal install cabal install 安装完成后 它告诉我 cab
  • 如何使用 Jasmine 监视 AngularJS 的 $timeout?

    我试图监视 timeout 以便我可以验证它是否未被调用 具体来说 我的生产代码 见下文 将 timeout 作为函数调用 而不是对象 timeout function and not timeout cancel for instance
  • 移动列表中特定元素的简单函数

    我是 Haskell 的新手 我正在尝试弄清楚如何创建一个函数 shift Eq a gt a gt a gt Int gt a shift x h t z 输入 一个通用列表和一个相同类型的元素 x 前提条件 元素x存在于列表中 Outp
  • 在 Haskell 中阅读 GraphML

    我正在尝试将包含单个有向图的 GraphML 文件读入 HaskellData Graph http hackage haskell org package containers 0 2 0 1 docs Data Graph html为了
  • Mocha 测试无法在 Nodejs 服务器上运行 [重复]

    这个问题在这里已经有答案了 客观的 找出当断言失败时我的测试崩溃的原因 背景 我有一个非常简单的 NodeJs 应用程序 我正在使用Mocha https www npmjs com package mocha for BDD https
  • 对 git Push 运行单元测试,对 Pull 请求运行集成测试

    在构建 R 包时 我们使用 testthat 来编写测试 我们有 2 个文件 特定包的测试文件 特异性R 我们用它来确保所有包继续一起工作并且总体结果良好 整体R 当前 当我们推送到 github 或通过 Travis 创建 PR 时 都会
  • 带有 Spock Stub 的泛型

    我无法为泛型类编译 Spock 存根 构造函数的签名如下 SomeClass SerSup
  • 如何在 JUnit5 中为测试套件设置自定义测试执行顺序?

    我在 JUnit5 上进行了大量测试 并在多个线程中并行运行 还有有关每次测试时间的信息 我想在最长的测试开始时运行 并将最快的测试留在最后以优化公共执行时间 我还没有找到在 JUnit5 中执行此操作的方法 版本中5 4有一个org ju
  • 使用 cabal new-install 重新安装相同版本的软件包

    我正在开发 Haskell 包 我还没有上传到Hackage 版本号是0 1 0 0 我正在使用新风格的 Cabal 命令 为了在我处理包的同时测试它 使库可用于测试项目 我运行cabal new install lib构建包后 然而 我注
  • 单元测试(有时)会因为浮点不精确而失败

    我有课Vector代表 3 维空间中的一个点 这个向量有一个方法normalize self length 1 将矢量缩小 放大为length vec normalize length length 该方法的单元测试有时由于浮点数的不精确性
  • 函数式编程是否需要新的命名约定?

    我最近开始使用 Haskell 学习函数式编程 并在 Haskell 官方 wiki 上发现了这篇文章 如何阅读哈斯克尔 http www haskell org haskellwiki How to read Haskell What t
  • 单元测试项目无法读取应用程序的App.config

    在运行 Visual Studio Pro 2013 12 0 21005 1 的构建计算机上 我有一个单元测试项目无法正确读取其 App config 文件 如果有的话 以下返回 null System Configuration Con
  • 如何使用 Moq 模拟 Web 服务调用?

    The using下面点击了我不想实际点击的外部资源 我想测试someResult以及使用它的代码 但每次我运行单元测试时 该代码仍然尝试访问真正的 Web 服务 如何使用最小起订量来伪造对 Web 服务的真实调用 但不模拟使用中的其余代码
  • OCMock - 尽管是预期的,但仍调用了意外的方法

    这是经过测试的代码 if MFMailComposeViewController canSendMail MFMailComposeViewController mailComposeController MFMailComposeView
  • 如何在 Yesod 中使用 CSS 框架?

    我想将 Blueprint CSS 框架与 Yesod 一起使用 有没有最佳实践 因为 Yesod 使用 CSS 模板 所以在我看来我不能直接使用 css 文件 我必须将它们重命名为 lucius files 吗 如何将 CSS 添加到 d
  • 整数转浮点数

    这段代码的工作原理 posToXY Float gt Float gt Integer posToXY a b do let y a b round y 但这不起作用 posToXY Integer gt Integer gt Intege

随机推荐

  • 如何设置 NSTextView 的默认字体?

    我正在使用禁用 富文本 选项的文本视图来显示一些纯文本 我找不到设置默认字体的方法 如果我在 IB 中输入一些文本 无论如何我都不想要 我可以在 IB 界面中设置字体 但是当用户删除字体并开始键入时 文本会更改为不同的字体和大小 我在这里阅
  • 用 python 替换文件名字符

    我有一些代码将单词 manual 添加到一堆文件名的末尾 我需要更改脚本 以便删除文件名的最后两个字母 ES 然后将其替换为 ES Manual 例如 AC 5400ES txt gt AC 5400 ES manual txt 我如何将该
  • 无法通过 Microsoft Graph API(C# 控制台)发送电子邮件

    我按照这 2 个链接创建了一个控制台应用程序 用于使用 Graph API 发送电子邮件 Microsoft Graph API 无法发送电子邮件 C 控制台 https stackoverflow com questions 574112
  • Docker Buildkit --mount=type=cache 用于缓存 .NET 6 的 Nuget 包

    我写了一个Dockerfile使用 Docker buildx mount type cache设置缓存我的 NuGet 包以加快构建速度 正如所示 这似乎在 NET 5 中有效其他问题 https stackoverflow com qu
  • 嵌入到java中的网络浏览器[重复]

    这个问题在这里已经有答案了 可能的重复 有没有办法在Java中嵌入浏览器 https stackoverflow com questions 48249 is there a way to embed a browser in java 我
  • 如何在 For Each...Next 循环中获取对象的索引?

    我使用以下语法来循环列表集合 For Each PropertyActor As JCPropertyActor In MyProperty PropertyActors i IndexOf PropertyActor Next 如何获取循
  • Selenium 下载完整的 html 页面

    我正在学习使用 Python Selenium 和 BeautifulSoup 进行网页抓取 目前 我正在尝试抓取Google搜索趋势上的热门搜索http www google com trends hottrends pn p5 http
  • 按索引动态添加项目到 List 而不使用 .Add()

    我试图将项目添加到列表中without动态使用 Add 请注意 由于我的项目的性质 我无法使用字典或简单数组甚至 HashSet 等替代数据结构 我需要一个锻炼解决方案来解决以下问题 List
  • ipython笔记本:如何并行化外部脚本

    我正在尝试使用 ipython 并行库中的并行计算 但我对此知之甚少 并且我发现对于对并行计算一无所知的人来说很难阅读该文档 有趣的是 我发现的所有教程都只是重复使用文档中的示例 并具有相同的解释 在我看来 这是毫无用处的 基本上我想做的是
  • 获取地点的纬度和经度 dbpedia

    我想获取一个我已经知道其名称的地点的纬度和经度 PREFIX geo
  • 有没有办法从 Ruby 中的实例调用私有类方法?

    以外self class send method args 当然 我想在类和实例级别提供一个相当复杂的方法 而不需要重复代码 UPDATE Jonathan Branam 这是我的假设 但我想确保没有其他人找到解决方法 Ruby 中的可见性
  • Objective-C:检查是否使用枚举选项

    我有一个使用 typedef 枚举的自定义对象 如果我为对象设置了一些枚举选项 如何检查这些选项是否正在使用 typedef enum Option1 Option2 Option3 Options 创建对象时我可能会使用 myobject
  • 异步 ASP.NET Web API 中的 ThreadStatic

    是否有可能在单个请求中使用线程静态变量 当前代码使用线程静态变量进行日志记录 现在我们想要使用异步控制器方法 具有异步和等待模式 这会导致问题 因为打开新线程时该变量为空 await会导致线程跳转 所以线程静态变量自然会出现问题 要解决此问
  • 实现 MutationObserver 代替 DOMSubtreeModified

    我有一个select multiple 我已经上过课custom multiselect在我正在捕捉的页面上DOMSubtreeModified事件如下 HTML
  • 使用Python直接向USB发送信号

    如何使用 Python 将 USB 端口连接设置为高或低 这可用于定制 USB 设备 例如 假设我有一个 LED 连接到 USB 端口 数据线 现在通过代码我想闪烁它或控制它 现在 这可以通过使用任何微控制器 Arduino Raspber
  • Android studio 的aspectj - AJDT 插件在哪里

    如何为 android studio 安装 AJDT 我知道 Eclipse 有一个 但我在 android studio 中找不到任何东西 我想做的是在启动之前对我的每个方法调用进行安全检查 我已经从这个网站尝试过AJDT http ec
  • 如何使用 ant build.xml 导入现有的 java web 项目

    我正在尝试使用导入功能将现有的 java web 项目 使用 ant build xml 构建 导入到 Eclipse 中 但 Eclipse 无法将其识别为项目 如何将项目导入到eclipse中 编辑 我所做的是将项目导入为 Java 项
  • 从 GitHub 上已删除的分支恢复作为拉取请求发送的提交

    我做了一件蠢事 I fork在 GitHub 上发布了一个存储库 我做了一些改变 commit把它们放在我的叉子上 我将此提交作为拉取请求回到原来的仓库 愚蠢的部分来了 我deleted 我的叉子 原始存储库的所有者要求在接受拉取请求之前对
  • 图例显示带有 geom_vline 的意外黑线

    在查看了 StackOverflow 上提供的一些答案后 我一直试图添加一个额外的图例 但不知何故我无法完成这项工作 我正在使用以下代码 x breaks lt seq as Date 2010 1 1 as Date 2015 4 1 m
  • 函数隐私和单元测试 Haskell

    你如何处理 Haskell 中的函数可见性和单元测试 如果导出模块中的每个函数以便单元测试可以访问它们 则可能会导致其他人调用不应出现在公共 API 中的函数 我想用 LANGUAGE CPP 然后围绕出口 ifdef LANGUAGE C