JUnit 测试私有变量? [复制]

2024-01-23

我被分配了对一个我从未直接使用 JUnit 进行过工作的类进行单元测试的任务,并且严格禁止更改包中的代码。这通常不是问题,因为我们的大多数单元测试只是为了功能和输入/输出一致性,这可以简单地通过运行例程并检查其返回值来完成。

然而,偶尔需要检查类内的私有变量,或者直接编辑私有变量来检查某些内部行为。有没有一种方法可以访问这些内容,无论是通过 JUnit 还是任何其他方式,以进行单元测试,而无需实际更改原始源代码包中的任何代码?如果不是,那么在现实世界中,单元测试人员与编码人员可能不是同一个人,程序员如何处理这个问题?


首先,您现在的处境很糟糕 - 任务是为最初不是您创建的代码编写测试,并且没有进行任何更改 - 噩梦!与你的老板交谈并解释,如果不使其“可测试”,就不可能测试代码。为了使代码可测试,您通常会进行一些重要的更改;

关于私有变量。实际上你永远不应该这样做。旨在测试私有变量是当前设计出现问题的第一个迹象。私有变量是实现的一部分,测试应该关注行为而不是实现细节。

有时,私有字段通过一些 getter 暴露给公共访问。我这样做,但尽量避免(在注释中标记,例如“用于测试”)。

由于您无法更改代码,因此我看不到检查私有变量的可能性(我的意思是真正的可能性,而不是像反射黑客等)。

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

JUnit 测试私有变量? [复制] 的相关文章

随机推荐

  • 将 Mercurial 与 Cygwin 一起使用?

    我们一直在尝试将 Mercurial 与 Cygwin 在 Windows 上 一起使用 但遇到错误 因为 Cygwin 使用正斜杠 而 Mercurial 似乎需要反斜杠 有解决方法吗 问题示例 hg status M src myfil
  • 自动运行可移动驱动器

    自动运行在 Windows 中被禁用 我正在寻找替代方案 我得到了这个 AutoIt 脚本 DBT DEVICEARRIVAL 0x00008000 WM DEVICECHANGE 0x0219 GUICreate GUIRegisterM
  • Knockout.js 模板未更新 dependentObservable 上的 UI 绑定

    该应用程序是在 vs2010 中使用 ASP NET MVC 3 编写的 我有一个淘汰赛模板 它使用 a 更新一些 css 和可见绑定 依赖的可观察的 仅当我绑定时才会出现此问题 选择元素的值 间隔ID 如果这没有被绑定 UI 按预期更新
  • 如何链接“并行”类层次结构?

    我有一个小的类层次结构 其中每个类对应于某个 TComponent 后代 例如基类 TDefaultFrobber 及其后代 TActionFrobber 和 TMenuItemFrobber 分别对应于 TComponent TCusto
  • 软件/硬件支持的 Android 密钥库的使用以及可能的安全/可用性缺陷

    我目前正在研究在 Android 应用程序中存储 使用密钥的可能性 我发现了尼古拉 埃连科夫的博客 http nelenkov blogspot com关于这个主题非常有帮助 我学到了很多关于 Android 密钥库和一些基于硬件的实现的知
  • Jetty默认是非阻塞的吗?

    请告诉我 Jetty 默认情况下是否是非阻塞 Web 服务器 例如 下面的代码将 Jetty 作为非阻塞 Web 服务器运行 Server server new Server 8080 ServletContextHandler conte
  • “正在缓存中间结果”是什么意思?

    我有一套n向量存储在3 x n matrix z 我发现外部产品使用np einsum 当我使用以下方法计时时 timeit v np einsum i j gt ij z z 我得到了结果 The slowest run took 7 2
  • 如何将子节点附加到特定位置

    如何将 childNode 附加到 javascript 中的特定位置 我想将 childNode 添加到 div 中的第三个位置 它后面还有其他节点需要向后移动 3变成4等 您可以使用 insertBefore https develop
  • 使用 regex 或 ToDicitionary 获取 url

    我怎样才能获取 oauth verifier RN9vtxDFfozW51CSTuls0J4C oauth token 4 2F3uYq 3vYUSjXaFXtS74B laW2V4d RN9vtxDFfozW51CSTuls0J4C an
  • VS-code 中分支名称旁边的 * 是什么意思?

    我不知道为什么会有 在 Visual Studio 代码中我的 git 分支名称旁边 有什么我应该警惕的吗 大多数 shell 着色插件和 IDE 通常使用 对于分支名称表示当前分支有已修改的文件 或者有时仅表示本地存储库有已创建的文件 但
  • 自定义节样式在sectionList REACT NATIVE中

    你知道如何在React native的sectionList组件中制作水平部分 特定的 吗 我想让第二部分水平 我尝试使用 flex 1 和 flexDirection row 修改 renderItem 中的项目样式 但不起作用 任何人都
  • 为什么 Groovy 正则表达式匹配器不能被否定?

    任何人都可以解释以下内容吗 println x x println x x result true true 没有 groovy 中的运算符 这是一个组合 and println x x 相当于 println x x 你需要的是 prin
  • 通用回调

    Extends https stackoverflow com questions 2485058 equivalent to window settimeout for c Related https stackoverflow com
  • 以编程方式更改应用程序的AppPool

    我需要更改某个网站下所有 选定应用程序的应用程序池 我的 IIS 上有所有网站和应用程序池 但我无法更改它们 有任何想法吗 这是我到目前为止所做的 这对我来说看起来很奇怪 因为只有字符串改变 而不是对象 private void Chang
  • 将 Google Closure 模板与 jQuery 结合使用

    我们开始使用 JavaScript 和 HTML5 创建一个应用程序 该应用程序将使用 REST API 来访问服务器资源 利用我们的开发团队已经熟悉的 jQuery 的强大功能和易用性 该应用程序将成为多语言版本 后来我们决定使用 Jav
  • 为 SQL Server 组合“LIKE”和“IN”[重复]

    这个问题在这里已经有答案了 是否可以合并LIKE and IN在 SQL Server 查询中 所以 这个查询 SELECT FROM table WHERE column LIKE IN Text Link Hello World 查找以
  • 如何检查该行是否在每页的第一行?

    我有要打印的数据列表 我想知道是否有任何方法可以查找该行是否是 JasperReports 报告中每个页面的第一行 有一个内置变量名 V PAGE COUNT 第 COUNT页 内置变量 包含生成当前页面时处理的记录数 对于页面上的第一条记
  • git 克隆时远端意外挂断

    My git尝试克隆存储库一段时间后 客户端反复失败并出现以下错误 这里可能有什么问题 Note 我已向 GIT 托管提供商注册了 SSH 密钥 Receiving objects 13 1309 10065 796 00 KiB 6 Ki
  • 尝试使用 Azure SDK 2.5 进行发布会导致 null-ref(对象引用未设置为对象的实例)[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 We upgraded我们来自 SDK 2 4 的 Azure 部署项目至 SDK 2 5 该项目有两个工人角色 将 2 4 项目发布到云服
  • JUnit 测试私有变量? [复制]

    这个问题在这里已经有答案了 我被分配了对一个我从未直接使用 JUnit 进行过工作的类进行单元测试的任务 并且严格禁止更改包中的代码 这通常不是问题 因为我们的大多数单元测试只是为了功能和输入 输出一致性 这可以简单地通过运行例程并检查其返