Java 单元测试:替换被测私有方法

2024-01-09

运行 JUnit 测试时是否有任何方法可以替换私有方法中的逻辑?

一些背景知识:我们有一些与 OSGi 容器内的包交互的私有方法。这在单元测试中不可用,因此该方法将失败。

我们已经研究过 JMockIt,但方法替换功能似乎想要强制您替换类中相互调用的所有方法。

实现会是这样的:

public final doSomething() {  
    firstThing();
    secondThing();
}
private firstThing() {  
    // normal code
}
private secondThing() {  
    // code which is unavailable in a unit test
}

单元测试将指定 secondaryThing() 的新实现:

// replace secondThing() in impl with this secondThing()

private secondThing() {  
    // dummy code
}

// run tests

你当然可以用JMockit解决这种情况。 一种方法是定义一个“模型”类,例如:

public class MyTest
{
    @Test
    public void testDoSomething()
    {
        new MockUp<ClassWhichDependsOnOtherBundles>()
        {
            @Mock
            void secondThing()
            {
               // do anything here
            }
        };

        new ClassWhichDependsOnOtherBundles().doSomething();
    }
}

只有secondThing()模拟类中的方法将被 JMockit 替换。 还可以使用 JMockit Expectations API 进行部分模拟。

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

Java 单元测试:替换被测私有方法 的相关文章

  • pytest:同一接口的不同实现的可重用测试

    想象一下我已经实现了一个名为的实用程序 可能是一个类 Bar在一个模块中foo 并为其编写了以下测试 测试 foo py from foo import Bar as Implementation from pytest import ma
  • 单元测试、集成测试还是设计中的问题?

    我编写了我的第一个单元测试 我认为它过于依赖其他模块 我不确定是否是因为 这是一个复杂的测试 我实际上已经编写了集成测试或 我的设计有问题 我首先要说的是 虽然我有大约 4 年的开发经验 但我从未学过 也没有人教过自动化测试 我刚刚使用 H
  • 使用 PHPUnit 和 Mockery 进行 Laravel 测试 - 设置控制器测试的依赖关系

    在终于通过了我愚蠢的简单测试后 我有一种感觉 我做得不对 我有一个 SessionsController 负责显示登录页面并让用户登录 我决定不使用外观 这样我就不必扩展 Laravel 的 TestCase 并在单元测试中承受性能影响 因
  • 测试后 NUnit 回滚

    我对 NUnit 以及一般的自动化测试 还很陌生 我最近做了一些 Ruby On Rails 工作 并注意到在我的测试套件中 当我创建对象 例如新用户 并在套件过程中提交它们时 它们永远不会提交到数据库 以便我可以运行一遍又一遍地测试 不用
  • 模拟 Spock 中的超类

    如何对 Spock 中具有超类的类进行单元测试 该超类调用来自其超类的方法调用 或者如何模拟 Spock 中的超类 Ex class Bar def method1 parm1 Method actions class Foo extend
  • 更改 WireMock __files 目录

    来自docs http wiremock org docs stubbing 要从文件中读取正文内容 请将文件放在 files 下 目录 默认情况下 这应该位于 src test resources 下 从 JUnit 规则运行时 当独立运
  • 如何在Python中模拟依赖关系

    我是 python 单元测试框架的新手 并且在模拟依赖项方面存在很多困惑 我正在尝试为类的以下成员函数编写单元测试 check something class Validations def check something self abc
  • Java、Spring:使用 Mockito 测试 DAO 的 DataAccessException

    我正在尝试增加测试覆盖率 所以我想知道 您将如何测试 DAO 中抛出的 DataAccessExceptions 例如在一个简单的 findAll 方法中 该方法仅返回数据源中的所有数据 就我而言 我使用 Spring JdbcTempla
  • [node][mocha]使用 mocha 测试时无法访问全局变量

    我正在尝试为快速节点应用程序创建单元测试 我希望用于测试的配置与生产中使用的配置不同 因此我实现了以下内容 In my index js 我将配置加载到全局变量中 如下所示 global env global env config requ
  • 如何模拟 typeORM 的 getCustomRepository

    我想对一个在其构造函数中使用 getCustomRepository 的类进行单元测试 但我只是想不出一种简单的方法来模拟它 这是我的班级代码 import getCustomRepository from typeorm export c
  • 线程“main”中出现异常 java.lang.NoClassDefFoundError: junit/textui/ResultPrinter 更新到 Yosemite 后

    我最近将系统从 Mavericks OSX 更新到 Yosemite 我过去可以右键单击测试并运行它 现在我得到了例外 Library Java JavaVirtualMachines jdk1 7 0 71 jdk Contents Ho
  • 是否有可能改变整个恐慌消息?

    NUnit 是一个 C 单元测试框架 允许您编写如下代码 Assert That someInt Is EqualTo 42 Assert That someList Has Member someMember 我喜欢这种代码 因为它看起来
  • Python 的最佳实践:assert command() == False [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 模拟 ScheduledExecutorService.scheduleWithFixedDelay(...) 返回 null

    在我的单元测试中 我注入了一个模拟实例ScheduledExecutoryService类进入我正在尝试测试的类 以便当scheduleAtFixedRate 方法被调用 它返回一个模拟的Future 但出于某种原因 它总是会回来null
  • Xcode 5:单元测试未运行

    我创建了一些测试用例 它们都通过了 那是因为它们没有被运行 从 Xcode 中 我得到 Test Suite All tests started at Test Suite All tests finished at Executed 0
  • 使用unittest时如何知道每次测试花费的时间?

    Unittest 仅显示运行所有测试所花费的总时间 但不单独显示每个测试所花费的时间 使用unittest时如何添加每个测试的计时 我想 目前不可能 http bugs python org issue4080 http bugs pyth
  • 如何在 ASP.NET Core 项目中使用 MStest 测试 Ok() 结果

    我正在使用 MStest 来测试我的控制器 我想测试这个动作 HttpGet Name GetGroups public async Task
  • Python unittest - 使用列表断言字典

    在为我的班级编写一些测试时 我遇到了有趣的简单问题 我想断言两个字典包含一些列表 但是这个列表可能不会以相同的方式排序 gt 这会导致测试失败 Example def test myobject export into dictionary
  • 如何仅在特定错误退出值(0 除外)上将 Jenkins 构建标记为成功?

    当我运行Execute shell构建步骤来执行脚本并且该脚本返回0 Jenkins将构建标记为SUCCESS 否则它将其标记为FAILURE这是预期的默认行为0表示没有错误 任何其他值表示有错误 有没有办法将构建标记为SUCCESS仅当返
  • 无需编译的 ES6 单元测试

    我无法找到任何 Mocha 或任何其他通过 Gulp 直接在 ES6 代码上运行的单元测试框架的示例 没有 Babel Webpack 等 我找到了一个在浏览器中使用 ES6 代码运行 Mocha 的示例 经过一些修改 但它不是自动化的 有

随机推荐

  • 无法为数据库添加种子;由于连接被拒绝而无法工作?

    当我尝试为我的应用程序播种时 出现错误 无法建立连接 因为 目标机器主动拒绝连接 连接 2 我相信原因是因为我遇到了 mysql2 的问题 所以我将它与 MySQL 5 5 服务器一起卸载 然后切换到 sqlite3 我认为 mysql2
  • 列表推导式替代 Python 中的 reduce()

    以下 python 教程说 列表推导式完全替代 lambda 函数以及函数map filter and reduce http python course eu python3 list compressive php http pytho
  • 如何为 JavaFX 应用程序的窗口设置图标?

    我在 Netbeans 上制作了一个 JavaFX 应用程序 并放置了用于将图标设置到窗口的代码 primaryStage getIcons add new Image file sicadcam png 当我从 Netbeans 运行该项
  • 通过 Google Drive API 从本地 CSV 文件转换并创建 Google Drive 电子表格

    我正在尝试将本地 CSV 文件上传到 Google 云端硬盘并像 Google 电子表格一样显示它 但是 当我转到 Google 云端硬盘并单击文件链接时 我只能下载它 而不能将其作为电子表格查看 我尝试使用 convert true 但文
  • 自定义 Facebook 之类的链接?

    是否可以添加自定义 facebook 之类的图标 我希望它成为 ul 我真的不想加载另一个库 他们的 SDK 或所有标签 有人实现了自定义的按钮吗 我不需要他们的按钮提供的计数器等 说实话 它们很丑 在过去的两个小时里我一直在四处寻找 但没
  • 如何在 Python 中创建常量?

    如何在 Python 中声明常量 在 Java 中 我们这样做 public static final String CONST NAME Name 在 Python 中不能将变量或值声明为常量 To indicate对于程序员来说 变量是
  • 重复排列:避免溢出

    背景 Given n球使得 a balls are of colour GREEN b balls are of colour BLUE c balls are of colour RED 当然a b c n 这些球可以排列的排列数量由下式
  • 如果只需要结果的低位部分,可以使用哪种 2 的补码整数运算而无需将输入中的高位清零?

    在汇编编程中 想要从寄存器的低位计算某些内容是相当常见的 但不能保证其他位清零 在 C 等高级语言中 您只需将输入转换为小尺寸 然后让编译器决定是否需要分别将每个输入的高位清零 或者是否可以在事实 This is especially co
  • CUDA 素数生成器性能低下

    我正在用 CUDA 编写我的第一个程序 它是一个素数生成器 它可以工作 但只比同等的单线程 C 代码快 50 CPU版本100 使用一个核心 GPU版本仅使用20 的GPU CPU 是 i5 2310 GPU是GF104 如何提高该算法的性
  • IIS7.5 max-age问题(asp.net mvc输出缓存)

    我们使用Windows Server 2008 R2 Enterprise和IIS7 5 7600 16385 我在服务器上部署了一个简单的Web asp net mvc c net Framework 4 5 1 如下所示的控制器 并且
  • 使用 msbuild 进行构建并动态设置项目引用

    我有几个引用 SQL Server 程序集的项目 对于 SQL Server 2005 和 SQL Server 2008 我当前维护 2 个项目文件 它们指向相同的源文件 唯一的区别是对 SQL Server 程序集的引用 有没有一种方法
  • 如何使用带有代理的discord python bot?

    需要使用带有代理的discord bot https 或socks 例如 代理为 192 168 1 1 3125 代理授权为 proxy login proxy pass 我已经尝试过这个例子 如何通过代理连接不和谐机器人 https s
  • 具有drive.file范围的更改源的预期行为是什么?

    我的期望是 如果我查询范围为drive file 的更改源 我将仅收到对我的应用程序拥有的文件的更改 然而 在我所做的测试中 我发现提要中的文件与我的应用程序无关 至少其中一些是与我共享的文件 有人确切知道这应该如何工作吗 Edit 0 类
  • 如果“mousemove”和“click”事件同时触发怎么办?

    不知道是否只是Chrome问题 现在无法检查 但是让我们尝试下面的代码 我们将两个事件绑定到某个元素 div on mousemove function e console log move click function e console
  • Windows cmd - 使用 oneliner 与用户输入提示 [npm] 交互

    我正在尝试将输入作为一行传递给用户输入提示 但很难弄清楚如何正确执行此操作 具体来说 我正在尝试使用登录到 npmnpm adduser npm login是它的别名 当它是一个奇异值时 它可以工作 但这只能让我到目前为止 echo exa
  • SiteCatalyst:跟踪 Webkit 浏览器上的自定义链接

    我的查询是我有一个重定向到另一个页面的链接 在 webkit 浏览器中 如何强制 sitecatalyst 服务器调用 脚本执行 在重定向发生之前完成 我正在使用 sitecatalyst 作为门户 我有 配置自定义链接调用以包含 didA
  • 在可选参数中设置日期时间的默认值[重复]

    这个问题在这里已经有答案了 如何在可选参数中设置日期时间的默认值 public SomeClassInit Guid docId DateTime addedOn DateTime Now Init codes here 有一个解决方法 利
  • 如何在一行内遍历这个哈希值?

    哈希中的每个键都有一个值 该值也是哈希 100 gt 1 gt ruby 2 gt enumerables 50 gt 3 gt can 4 gt cause 15 gt 5 gt occassional 6 gt insanity 对于每
  • 正确关闭数据库连接 - VBScript + MS SQL

    我有一个连接到 SQL 服务器的经典 ASP vbscript Web 应用程序 在某些页面上 我打开多个数据库连接来提取数据 我的问题是 是在每个页面底部添加关闭连接功能更好 还是在使用后立即显式关闭连接更好 请记住 在这些特定页面上 每
  • Java 单元测试:替换被测私有方法

    运行 JUnit 测试时是否有任何方法可以替换私有方法中的逻辑 一些背景知识 我们有一些与 OSGi 容器内的包交互的私有方法 这在单元测试中不可用 因此该方法将失败 我们已经研究过 JMockIt 但方法替换功能似乎想要强制您替换类中相互