如何使用 Mockito 模拟记录

apf*_*ger 12 java mocking mockito

我正在尝试模拟唱片班

    @Test
    public void testRecord() {
        record Rec(){}
        Mockito.mock(Rec.class);
    }
Run Code Online (Sandbox Code Playgroud)

但它给出了错误

    org.mockito.exceptions.base.MockitoException:
    Cannot mock/spy class Rec
    Mockito cannot mock/spy because :
     - final class
        at ...
Run Code Online (Sandbox Code Playgroud)

这当然是有道理的。

thc*_*chp 25

2023 年 11 月 15 日更新

从 5.x 版本开始,mockito 将其默认的模拟运行器切换为mockito-inline。

Mockito 5 将默认的mockmaker切换为mockito-inline,现在需要Java 11(请参阅Mockito GitHub主页

使用mockito 5.x,如果不能,请按照下面的先前答案操作:


正如错误消息所示,您无法使用默认的 Mockito 模拟最终类。

但社区提出了mockito-inline,一个扩展带来了实验性功能,例如模拟最终类和方法或静态方法。

只需将其添加到您的中pom.xml并正常使用 Mockito 即可。

<dependency>
    <groupId>org.mockito</groupId>
    <artifactId>mockito-inline</artifactId>
    <scope>test</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)

对于 Gradle:

testImplementation 'org.mockito:mockito-inline:4.11.0'
Run Code Online (Sandbox Code Playgroud)

  • 对于任何后来者来说,这些实验性功能似乎已被上游到mockito-core 5.x 中,从而消除了对该工件的需求。 (2认同)