我正在将 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");
}
据我观察,两种变体似乎都有效。
所以我的问题是:这两个变体之间的行为有什么区别吗?
就您而言,两者都可以。然而,
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
块中激活,但它可能会导致大型代码库中的混乱,因为它对于处理静态模拟不太明确。