这两种模拟静态方法的方式相同吗?

问题描述 投票:0回答:1

我正在将 Java 17 与 JUnit 5 和 Mockito 5 结合使用。我正在处理遗留代码并添加一些新测试或编辑旧测试。

通常,当我模拟静态方法时,我会按照 https://www.baeldung.com/mockito-mock-static-methods :

中的描述进行操作
try(MockedStatic<MyClass> myClassMock = Mockito.mockStatic(MyClass.class)){
    myClassMock.when(MyClass::myMethod).thenReturn("myValue");
}

但是我在遗留代码中发现了一些测试,他们使用

Mockito.when()
而不是静态模拟(在我的例子中
myClassMock

因此相同的测试代码如下所示:

try(MockedStatic<MyClass> myClassMock = Mockito.mockStatic(MyClass.class)){
    Mockito.when(MyClass::myMethod).thenReturn("myValue");
}

据我观察,两种变体似乎都有效。

所以我的问题是:这两个变体之间的行为有什么区别吗?

java unit-testing mockito mockstatic
1个回答
0
投票

就您而言,两者都可以。然而,

  • myClassMock.when(MyClass::myMethod).thenReturn("myValue") - is the preferred approach as it is directly tied with 
    MockedStatic` & 的范围在静态模拟上下文中。它使代码更具可读性。
  • Mockito.when(MyClass::myMethod).thenReturn("myValue")
    是用于存根常规模拟的通用方法。在您的情况下,它适用于静态模拟,并且
    myClassMock
    已在
    try
    块中激活,但它可能会导致大型代码库中的混乱,因为它对于处理静态模拟不太明确。
© www.soinside.com 2019 - 2024. All rights reserved.