首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么JMockit期望阻止抛出IllegalMonitorStateException?

JMockit是一个用于Java开发的测试框架,它可以模拟和注入测试对象的行为和状态。在多线程编程中,使用JMockit进行单元测试时,可能会遇到对于IllegalMonitorStateException的期望阻止。

IllegalMonitorStateException是Java中的一个异常类,表示在非法的监视器操作时抛出的异常。在Java中,监视器是用于实现线程同步的一种机制,通过synchronized关键字来获取和释放监视器。当一个线程尝试释放一个未拥有的监视器时,就会抛出IllegalMonitorStateException异常。

在使用JMockit进行单元测试时,我们可能会模拟一个对象的方法,该方法内部使用了synchronized关键字来进行线程同步。为了确保测试的准确性,JMockit会期望阻止抛出IllegalMonitorStateException异常,因为在测试环境中,我们不希望真正地获取和释放监视器。

通过JMockit的模拟和注入功能,我们可以在测试中模拟一个对象的方法,并且可以控制方法的行为和返回值,而不会真正地获取和释放监视器。这样可以确保测试的可重复性和稳定性,避免了多线程环境下的竞态条件和死锁等问题。

总结起来,JMockit期望阻止抛出IllegalMonitorStateException异常是为了确保在使用该框架进行单元测试时,能够正确模拟对象的方法,避免真正地获取和释放监视器,保证测试的准确性和稳定性。

腾讯云相关产品和产品介绍链接地址:

  • 云计算产品:https://cloud.tencent.com/product
  • 人工智能产品:https://cloud.tencent.com/product/ai
  • 物联网产品:https://cloud.tencent.com/product/iotexplorer
  • 移动开发产品:https://cloud.tencent.com/product/mobdev
  • 存储产品:https://cloud.tencent.com/product/cos
  • 区块链产品:https://cloud.tencent.com/product/baas
  • 元宇宙产品:https://cloud.tencent.com/product/mu
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

避坑!-重入锁之ReentrantLock写法

{ int num = 1/0; lock.lock(); }finally{ lock.unlock(); } } 此时正常我们所期望能出现的崩溃信息是...java.langArithmeticException: /by zero,但是实际出现的异常则是:(出现的异常是:java.lang.IllegalMonitorStateException) 这和我们所期望的异常是不一样的...真实的崩溃信息被覆盖掉了 原因是: 因为上述代码无论是否会抛出异常,finally中的代码块都会被执行,最后会调用unlock()方法。...而unlock()方法最终会调用ReentrantLock$Sync. tryRelease()方法,然后会判断当前线程是否是拥有锁的线程,如果不是则会抛出异常,从而会将真实的崩溃信息覆盖掉。...写在外面的话,lock()方法抛出异常的话就不会执行后续代码了。 既然unlcok()方法会抛出异常,为什么要写在finally代码块中呢?

26220

Mock工具介绍

为什么使用Mock 1.解除依赖,团队并行工作 接口尚未开发完成,在系统交互双方定义好接口之后,我们可以提前进行开发和测试,并不依赖上游系统的开发实现。...分为单元测试级别的Mock工具和接口测试级别的Mock工具 单元测试级别的mock工具 单元测试级别的Mock工具有Easymock、jMock、Mockito、Unitils Mock、PowerMock、JMockit...它提供对接口的模拟,能够通过录制、回放、检查三步来完成大体的测试过程,可以验证方法的调用种类、次数、顺序,可以令 Mock 对象返回指定的值或抛出指定异常。...Mock工具对比 Features: Feature EasyMock jMock Mockito UnitilsMock PowerMock(EasyMock) PowerMock(Mockito) JMockit...14/14 Qualities: Feature EasyMock jMock Mockito UnitilsMock PowerMock(EasyMock) PowerMock(Mockito) JMockit

4.1K10

Java Wait错误用法

为什么会在1号线程等待的时候,2号线程运行了呢,它不应该是要等待1号线线程中的锁释放了才能运行的吗?又为什么会报两个错呢?...为什么会报Exception in thread "Thread-0" 错 为什么会报java.lang.IllegalMonitorStateException 错 那么带着问题我们来分析下这段代码...这也解释了前面的问题,为什么2号线程会运行。...只有拥有该对象monitor的线程才可以调用该对象的notify()和notifyAll()方法;如果没有该对象monitor的线程调用了该对象的notify()或者notifyAll()方法将会抛出java.lang.IllegalMonitorStateException...至于为什么会报Exception in thread "Thread-0" 错,这个错跟后面的IllegalMonitorStateException是同一个错,只是因为当时线程休眠了,没有执行完而已。

1.1K10

dotnet 读 WPF 源代码笔记 为什么自定义的 UserControl 用户控件不能跨程序集继承

在 WPF 框架里面,从框架层阻止了开发者对自定义的 UserControl 用户控件跨程序集继承的逻辑,一旦尝试进行跨程序集继承,将在运行时抛出异常。...本文将从源代码的角度告诉大家 WPF 框架是如何阻止跨程序集继承 先来写一些演示使用的代码,新建一个 WpfLibrary1 项目用来存放自定义的用户控件。....xaml 是期望从 WpfLibrary1 程序集获取对应的 XAML 定义资源(准确来说是 BAML 资源)进行加载。...但实际的调用类型,却发现是继承的类型,放在另一个程序集,不符合框架设计的预期,抛出异常 这就是为什么自定义的 UserControl 用户控件不能跨程序集继承的原因 在 WPF 的 LoadComponent...方法是比较复杂的,本文只是将里面相关代码写出来,具体是如何调用的,我是通过调试的方法了解的 调试的方式我录了视频放在哔哩哔哩,请看 为什么自定义的 UserControl 用户控件不能跨程序集继承_哔哩哔哩

94910

java中异常的捕获及处理「建议收藏」

程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行,这就是异常。异常发生时,是任程序自生自灭,立刻退出终止。在Java中即,Java在编译或运行或者运行过程中出现的错误。...throw — 用于抛出异常。 throws — 用在方法签名中,用于声明该方法可能抛出的异常。主方法上也可以使用throws抛出。...IllegalMonitorStateException 抛出的异常表明某一线程已经试图等待对象的监视器,或者试图通知其他正在等待对象的监视器而本身没有指定监视器的线程。...,抛出该异常。...在catch捕获异常时,为什么不考虑使用Throwable类型,而只是使用Exception来进行接收? Throwable表示的范围要比Exception大。

2.1K40

单元测试入门:是什么?类型和工具

为什么要进行单元测试? 有时,软件开发人员会尝试通过进行最少的单元测试来节省时间。这是一个谬误,因为跳过单元测试会导致在应用程序完成后的系统测试,集成测试乃至Beta测试期间更高的缺陷修复成本。...JMockitJMockit是开源的单元测试工具。它是具有行和路径度量的代码覆盖工具。它允许带有记录和验证语法的模拟API。该工具提供行覆盖率,路径覆盖率和数据覆盖率。...单元测试的缺点 不能期望单元测试发现程序中的每个错误。即使在最简单的程序中,也无法评估所有执行路径 单元测试的本质就是将重点放在代码单元上。因此,它无法发现集成错误或广泛的系统级错误。

1.1K10

Java面试系列9

✎二、必须要知道的运行时异常 ArithmeticException 是出现异常的运算条件时,抛出此异常。 例如,一个整数“除以零”时,抛出此类的一个实例。...IllegalMonitorStateException 抛出的异常表明某一线程已经试图等待对象的监视器,或者试图通知其他正在等待对象的监视器而本身没有指定监视器的线程 IllegalPathStateException...InvalidOpenTypeException 当开放数据 值的开放类型 不是期望的类型时,抛出此运行时异常。...指示某排序索引(例如对数组、字符串或向量的排序)超出范围时抛出 InputMismatchException 由 Scanner 抛出,表明获取的标记与期望类型的模式不匹配,或者该标记超出期望类型的范围...方法抛出,表明枚举中没有更多的元素。

2K40

效率编程 之「异常」

在决定使用受检的异常或是未受检的异常时,主要原则是:如果期望调用者能够恰当地恢复,对于这种情况就应该使用受检的异常。通过抛出受检的异常,强迫调用者在一个catch子句中处理该异常,或者将它传播出去。...如果方法抛出的异常与它所执行的任务没有明显的联系,这种情形将会使人不知所措。当方法传递由底层抽象抛出的异常时,往往会发现这种情况。...总而言之,如果不能阻止或者处理来自更底层的异常,一般的做法是使用异常转译,除非底层方法碰巧可以保证它抛出的所有异常对高层也合适才可以将异常从底层传播到高层。...要想使方法具有失败原子性,以下几种途径可以实现这种效果: 最简单的方法莫过于设计一个不可变的对象,如果一个操作失败了,它可能会阻止创建新的对象,但是永远也不会使已有的对象保持在不一致的状态之中;对于在可变对象上执行操作的方法...至少,catch块也应该包括一条说明,解释为什么可以忽略这个异常。此外,错误(相对于异常)通常是不可恢复的,当方法抛出错误时,它们不需要努力保持失败原子性。

56930

多个线程之间的通信问题

在同步代码块中,锁对象是谁,就用那个对象来调用wait和notify 为什么wait方法和notify方法需要定义在Object?      ...} } }.start(); } } // 等待唤醒机制 /* * 在同步代码块中,锁对象是谁,就用那个对象来调用wait和notify * 为什么...在调用 Condition、waiting 或 signalling 这些方法中的任意一个方法时,如果没有保持此锁,则将抛出 IllegalMonitorStateException。...如果线程在等待时被中断,则等待将终止,并将抛出 InterruptedException,清除线程的中断状态。 等待线程按 FIFO 顺序收到信号。...通常,将抛出一个异常(比如 IllegalMonitorStateException)并且该实现必须对此进行记录。 与响应某个信号而返回的普通方法相比,实现可能更喜欢响应某个中断。

38210
领券