PowerMock:如何取消模拟方法?

2024-01-01

我有一个静态方法,使用 PowerMock 进行模拟以引发异常。 (它会删除文件。)不幸的是,在我@After(after-each-test) 方法,我需要在没有模拟的情况下调用此方法。我怎样才能模拟一个方法?

我没有看到相当于Mockito.reset()。 [参考:mockito:如何取消模拟方法? https://stackoverflow.com/questions/8123091/mockito-how-to-unmock-a-method ]

Example:

@RunWith(PowerMockRunner.class)
@PrepareForTest(PathUtils.class)  // Important: This class has a static method we want to mock.
public class CleaningServiceImplTest2 extends TestBase {

    public static final File testDirPath = new File(CleaningServiceImplTest2.class.getSimpleName());

    @BeforeClass
    public static void beforeAllTests() throws PathException {
        recursiveDeleteDirectory(testDirPath);
    }

    @AfterClass
    public static void afterAllTests() throws PathException {
        recursiveDeleteDirectory(testDirPath);
    }

    private File randomParentDirPath;
    private CleaningServiceImpl classUnderTest;

    @Before
    public void beforeEachTest() {
        randomParentDirPath = new File(testDirPath, UUID.randomUUID().toString()).getAbsoluteFile();
        classUnderTest = new CleaningServiceImpl(randomParentDirPath);
    }

    @After
    public void afterEachTest() throws PathException {
        recursiveDeleteDirectory(randomParentDirPath);
    }

    public static void recursiveDeleteDirectory(File dirPath) throws PathException {
        // calls PathUtils.removeFile(...)
    }

    @Test
    public void run_FailWhenCannotRemoveFile() throws IOException {
        // We only want to mock one method.  Use spy() and not mockStatic().
        PowerMockito.spy(PathUtils.class);

        // These two statements are tightly bound.
        PowerMockito.doThrow(new PathException(PathException.PathExceptionReason.UNKNOWN, randomParentDirPath, null, "message"))
            .when(PathUtils.class);
        PathUtils.removeFile(Mockito.any(File.class));

        classUnderTest.run();
    }
}

这花了我一段时间才弄清楚,所以我正在回答我自己的问题。

AFAIK,您需要“撤消”每个模拟。Mockito.reset()不会与Class<?>参考。在测试方法的末尾添加:

// Undo the mock above because we need to call PathUtils.removeFile() within @After.
PowerMockito.doCallRealMethod().when(PathUtils.class);
PathUtils.removeFile(Mockito.any(File.class));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PowerMock:如何取消模拟方法? 的相关文章

  • 透明平开窗

    我有一点JWindow上面有一个标志 用户可以将东西拖到上面 我主要在 OS X 上开发我的应用程序 为了获得我使用的透明窗口 setBackground new Color 0 0 0 0 在 Mac 上 这工作得很好 但在 Window
  • 设置 SWT Shell 的默认字体

    有没有办法为整个 Shell 设置默认字体 以便任何新控件都将使用相同的字体 看来现在我必须为我创建的每个控件设置字体 这导致了太多的冗余 默认使用的字体由平台选择 请参阅中的其他信息 类字体 SWT 标准小部件工具包 http book
  • 使用 AbstractTableModel 获取 JTable 中选定的行

    我有一个JTable using AbstractTableModel我在哪里有一个JCheckBox在第一列中用于选择行 现在 我需要从已检查的表中获取选定的行 现在 我按顺序从第一行遍历到最后一行并获取所有选择的行 如下所示 List
  • 在Java中清空数组/处理

    除了循环遍历数组中的每个元素并将每个元素设置为 null 之外 Java 处理中是否有一个本机函数可以简单地清空数组 或销毁它 以便能够将其重新声明为新数组 There s Arrays fill myArray null 并不是说它执行的
  • 在 TestNG 中运行多个类

    我正在尝试自动化一个场景 其中我想登录一次应用程序 然后进行操作而无需再次重新登录 考虑一下 我有在特定类的 BeforeSuite 方法中登录应用程序的代码 public class TestNGClass1 public static
  • Java Spring 应用程序存在内存泄漏。系统非堆内存不断增加

    我已使用 yourkit 分析器监视我的 Web 应用程序 保留最大大小的主要对象是 SessionFactoryImpl webappclassloader 和 CGlib 对象显示 spring crone调度程序会导致内存泄漏吗 我尝
  • 如何修复 Android 7.0 的 Spinner 模式下的 DatePickerDialog?

    我目前正在开发一个简单的项目 其中包含一个包含在 Web 视图中的网站 具有少量交互 以提高网站本身和 Android 移动设备之间的交互性 由于该网站包含用户生日的日期输入字段 因此我希望实现一个与所有设备兼容的旋转格式的日期选择器 我尝
  • 通过 jquery/javascript 在警报或确认对话框中单击“确定”?

    我正在考虑在backbone js 和jquery 中编写一些UI 测试 它们可能不是最好的方法 但这是我正在考虑的事情 通过纯代码自动化测试而无需记录和回放 使用这种方法唯一让我摸不着头脑的是 在某些 用例流程 执行的 中 会出现确认 警
  • Java 唤醒休眠线程

    我阅读了其他帖子 但没有找到我正在寻找的确切答案 所以我希望有人能给出一些澄清 我有一个将运行一段时间的程序 我有一些在后台运行的线程来执行各种任务 为了简单起见 让我们考虑 3 个线程 ThreadA每 10 秒执行一次任务 其中Thre
  • C# 中的协变和逆变

    首先我要说的是 我是一名正在学习 C 编程的 Java 开发人员 因此 我会将我所知道的与我正在学习的进行比较 我已经使用 C 泛型几个小时了 我已经能够在 C 中重现我在 Java 中知道的相同内容 除了几个使用协变和逆变的示例 我正在读
  • Java元数据读写

    是否可以以通用方式 对于所有图像类型 在 Java 中读取和写入元数据 我找到了一些示例 但它们总是特定的 例如 JPEG 或 PNG 我需要一些足够通用的东西 而不是到处都有 if else 语句 我不想重写源代码 但这是一个很好的例子
  • Java:使用 Java.util.concurrent 线程访问读取线程串行端口

    我正在尝试编写一个 Java 串行设备驱动程序并想使用 对我来说是新的 java util concurrent包裹 我有一种发送数据包然后等待 ACK 的方法 我打算有炭 接收在不同的线程中运行 如果接收线程收到 ACK 它应该使用发送数
  • 如何从 Google Custom Search API 获取超过 100 个结果

    我正在尝试使用 Google Custom Search API 在 Java 中进行研究 因此 我需要为每个查询提供一个大的结果集 然而 我似乎仅限于前 100 个结果 这比我需要的要少得多 我使用这样的列表方法 list setStar
  • Java ConcurrentModificationException [重复]

    这个问题在这里已经有答案了 当删除倒数第二个元素时 没有 ConcurrentModificationException List
  • 在服务器内部调用 Web 服务

    我有一个网络服务 getEmployee 当传递 id 时 它会获取单个员工的员工详细信息 同一服务器上的另一个 Web 服务 getEmployeeList 当传递一个部门时 它会获取整个员工列表 这将获取部门的 ID 然后调用 getE
  • 找不到符号assertEquals

    我正在尝试为计算器编写第一个单元测试 但 NetBeans 说它找不到该符号assertEquals和注释 Test 我应该包括一些东西吗 我正在使用 NetBeans 7 3 1 和 W7 package calculator impor
  • scala中的协变类型参数需要在java接口中保持不变

    我有一个看起来像这样的特征 一些进一步的信息可以在我自己提出了这个相关问题 https stackoverflow com questions 3695990 inheritance and automatic type conversio
  • H2 - (相当)长的 INSERT 失败,错误 42000

    H2 内存中 插入 错误 42000 尝试过版本 1 4 196 1 4 197 1 4 199 我还尝试在 H2 服务器 本地 上执行 INSERT 也失败 给出错误的行 抱歉 但出于安全原因 我无法生成更多 INSERT INTO tb
  • 方法签名中带或不带synchronized关键字的方法具有相同的字节码

    对于以下 2 个类 获得相同的 Java 字节码 java版本 java 版本 1 8 0 181 Java TM SE 运行时环境 构建 1 8 0 181 b13 Java HotSpot TM 64 位服务器 VM 内部版本 25 1
  • 将带有 webapp 的 WAR 部署到 Maven 中央存储库是否有意义?

    这样做有意义吗 如果是 我在哪里可以找到使用简单的 Web Hello World 执行此操作的示例 当人们从 Maven 执行 Web 应用程序时 他们会使用 Jetty 来运行它吗 我想 tomcat 太重了 任何帮助将不胜感激 谢谢

随机推荐

  • 查找项目并更改自定义对象数组中的值 - Swift

    我有这门课 class InboxInterests var title var eventID 0 var count var added 0 init title String eventID NSInteger count Strin
  • 如何强制 gmail 收件箱重新加载/刷新?

    我构建了一个使用 Gmail API 中的导入端点的应用程序Gmail Users Messages import 克隆电子邮件但允许更改主题 然后 它使用删除端点删除原始 旧消息Gmail Users Messages remove 我想
  • java字节码-小于int的类型的表示

    在我大学的一个项目中 我直接使用 Java 字节码 浏览 JVM 可用指令列表后 http en wikipedia org wiki Java bytecode instruction listings http en wikipedia
  • HTML 图像 src 区分大小写

    我的图像文件夹名称大写 但是src是小写的 所以这不是加载图像 我无法将所有图像文件夹设置为小写 因此我想更改代码以采用不区分大小写的路径 我有一个这样的链接 a href http www google com img src image
  • 构建 Android NDK 项目时出现问题

    我尝试在 Linux Ubuntu 上的 Eclipse 中构建项目 Eclipse 显示错误消息 Build of configuration Default for project FFVideo home art android nd
  • Duck 在 Typescript 中输入 Promise

    假设我有一个日志记录函数 它接受一个函数并记录名称 参数和结果 function log a f args A gt B args A gt B return function args A B console log f name con
  • 使用 jQuery 检查单选按钮后切换内容

    我该如何解决这个问题 我想切换每个单选按钮的内容 如果已选择 另外我如何设置默认选择的单选按钮 option detail hide option click function this next div slideToggle this
  • 如何增加分配给 GlassFish 的内存?

    我想增加 GlassFish 实例的内存分配 有人可以帮我吗 您的答案可以通过管理控制台或命令行 我不介意 找到您正在使用的文件domain xml 即 usr local glassfish 4 1 glassfish domains d
  • 使用枚举绑定组合框选定值

    我无法绑定组合框选定的值 public void InitializePage cbStatus DataSource Enum GetValues typeof CourseStudentStatus 在我的构造函数上 public Ed
  • 状态更改后 useEffect 挂钩未触发

    我有两个兄弟组件 它们通过反应中的上下文共享状态 组件之间共享的状态是一个数组 如果我更新arr在一个组件中声明 我希望另一个组件侦听该更新并相应地执行某些操作 当我使用useEffect在第二个组件中 我监听以下内容的变化arr状态变量
  • 未找到 ui 头文件 (ui_name.h)

    我已经创建了表单 并将其保存在项目目录中 现在我想添加一些代码 所以 我创建了头文件 ifndef SORTDIALOG H define SORTDIALOG H include
  • 我们如何在 iOS 13 的当前 iOS 应用程序中支持深色模式?

    我当前的应用程序是用 objC 和 Swift 开发的 我需要支持暗模式 谁能建议我如何在全球范围内实现这一目标 以下是添加颜色逻辑的代码 该逻辑应出现在深色模式中 if self traitCollection userInterface
  • 如何使用iText在PDF中插入图像并下载到客户端机器?

    我使用 jdbc 从数据库获取数据 然后使用 iText 创建一个可以在客户端计算机上下载的 PDF 文件 该应用程序以 html jsp 编码并在 Apache Tomcat 上运行 我用response getOutputStream立
  • WPF 中的 GridView 动态列宽

  • Pandas - 制作列 dtype 对象或因子

    在 pandas 中 如何将 DataFrame 的列转换为 dtype 对象 或者更好的是 变成一个因素 对于那些会说 R 的人 在 Python 中 我该如何as factor 另外 有什么区别pandas Factor and pan
  • Alamofire 嵌套请求

    我需要向同一个 API 发出三个不同的请求 这些调用都不依赖于其他调用 我目前的请求嵌套如下 API getPopularMovies responseObject error in if let results responseObjec
  • 关于序列点的解释

    最近 我看到很多关于一些疯狂但语法上允许的代码语句的输出的问题 例如i i 1 and i i i i 1 坦率地说 现实中几乎没有人在实际编程中编写任何此类代码 坦白说 在我的专业经验中 我从未遇到过此类代码 所以我通常最终会跳过这样的问
  • Oracle Contains 不起作用

    我的表中有一个列是上下文索引的 CREATE INDEX CIDX MUSTFIXBY ON TABLE MUST FIX BY INDEXTYPE IS CTXSYS CONTEXT NOPARALLEL 我正在尝试使用 where 条件
  • 如何使用 es6 风格导入来导入 MongoDB?

    希望这是一个简单的问题 我正在尝试使用 es6 import from 样式导入 MongoDB 如果我使用 node require 导入它工作正常 let mongo require mongodb let MongoClient mo
  • PowerMock:如何取消模拟方法?

    我有一个静态方法 使用 PowerMock 进行模拟以引发异常 它会删除文件 不幸的是 在我 After after each test 方法 我需要在没有模拟的情况下调用此方法 我怎样才能模拟一个方法 我没有看到相当于Mockito re