当前位置: 首页 > 知识库问答 >
问题:

一个扩展ArrayBlockingQueue的类

仲孙英才
2023-03-14

你好,有人知道如何发现扩展< code>ArrayBlockingQueue的类吗?例如,我想监视下面的< code>MyBufferQueue类

public class MyBufferQueue extends ArrayBlockingQueue<MyBuffer> {}

在属于java库的< code>ArrayBlockingQueue类中,有这样一个方法:

public void put(E e) throws InterruptedException {
   Objects.requireNonNull(e);
   final ReentrantLock lock = this.lock;
   lock.lockInterruptibly();
   try {
       while (count == items.length)
       notFull.await();
       enqueue(e);
   } finally {
       lock.unlock();
   }
}

我遇到的问题是,当我监视类< code>MyBufferQueue时,以及在测试期间访问方法< code > ArrayBlockingQueue . put(E . E)时,我在< code>this.lock中得到一个< code > NullPointerException ,当我在测试中创建< code>MyBufferQueue的一个新实例时,它不应该是< code>null的,并且当我在创建新实例

这就是测试方法的样子:

@Test
void testMyBuffer() {
    MyBufferQueue queue = spy(new MyBufferQueue(1));
    doNothing().when(queue).retryAll();
    
    queue.consumeFullQueue();

    verify(queue).retryAll();
}

对于间谍,我使用Mockito版本MockitoCore:4.7.0,我使用Java 18。

提前感谢。

共有1个答案

凌昕
2023-03-14

我最近也遇到了同样的问题,这是由Java17及以上版本(可能更早,但至少在Java11之后)与Mockito结合使用的方式造成的。间谍对象的实例字段保持<code>null</code>。

解决方案非常简单-将<code>mockito核心。相同的组ID,相同的版本,只是不同的工件ID。

 类似资料:
  • Szenario:我有两个扩展,它们用一些特定字段扩展了。在TYPO3 9之前,我必须使用以下打字脚本配置对新闻扩展的依赖关系进行配置: 模型扩展了基本扩展的模型: 在TYPO3 10中,在(中断:#87623): 只要您只有一个扩展新闻扩展名的扩展名,它就可以工作多久。如果您有第二个扩展并启用TYPO3缓存,您将得到一个错误,即在第一个扩展中添加的字段在新闻扩展的模板中不可用。奇怪的是,这个问题

  • 1. 一个扩展的基本结构 2. 编译我们的扩展 3. 静态编译 4. 编写函数 5. 小结 每一个PHP扩展都至少需要两个文件:一个配置文件和一个源文件。配置文件用来告诉编译器应该编译哪几个文件,以及编译本扩展是否需要的其它lib。

  • 问题内容: 我正在学习Java,并且希望将自己的课堂变成可观察的课堂。 但是我已经有了它扩展了另一个类。 我该怎么办? 问题答案: 我建议避免完全使用该类,而应 定义事件特定的侦听器和相应的事件定义 。然后在您的类中定义一个侦听器列表,以及添加和删除侦听器以及向其传播事件的方法(请参见下文)。 强制您使用它来表示事件,然后使用来检查事件类型,这是一种丑陋的非OO方法,并使代码更难以理解。如果查看j

  • 我已经安装了家园,我试图在Laravel项目版本4.2上工作,但是我一直收到以下错误: 需要PHP扩展。 我已经在服务器上安装了Mcypt,并在PHP7INI文件中启用了它。由于某种原因,这个问题不想消失。 有什么建议,我可以做什么,以启用我的虚拟框的密码?

  • 我们将通过本文,学会创建一个 Creator3D 扩展,并通过扩展执行一段自定义脚本。 创建并安装扩展 找到 ~/.CocosEditor3D/packages Windows 用户为 C:\Users${你的用户名}.CocosEditor3D\packages),或者 ${你的项目路径}/packages 文件夹,如果文件夹不存在,则新建这个文件夹。 在这个文件夹里新创建一个空的文件夹,并命名

  • 本文会教你如何创建一个简单的 Cocos Creator 扩展包,并且向你介绍一些扩展包中的基本概念。通过学习,你将会创建一个扩展包,并在主菜单中建立一个菜单项,并通过该菜单项在主进程中执行一条扩展指令。 创建并安装扩展包 创建一个空文件夹命名为 “hello-world”,并在该文件夹中创建 main.js 和 package.json 两个文本文件。该扩展包的结构大致如下: hello-wor