使用 Mockito 验证静态方法调用
Verify static method calls with Mockito
我正在尝试在测试中验证是否调用了静态方法。为此,我正在使用 Mockito。
此题与this类似。但是,投票最多的回复中建议的解决方案不再适用,因为 MockedStatic 验证方法已弃用。
try (MockedStatic<SomePublicClass> dummyStatic = Mockito.mockStatic(SomePublicClass.class)) {
dummyStatic.when(() -> SomePublicClass.myPublicStaticFunc(anyInt()))
.thenReturn(5);
// when
System.out.println(SomePublicClass.myPublicStaticFunc(7));
//then
dummyStatic.verify(
times(1),
() -> SomePublicClass.myPublicStaticFunc(anyInt())
);
}
另一种方法是调用
verify(dummyStatic).myPublicStaticFunc(anyInt);
但是,它抱怨方法 myPublicStaticFunc(int) 未定义类型
模拟静态。
我有什么选择,或者我缺少什么。另外,我知道我可以使用 PowerMock 来尝试这个,但目前,我正在尝试仅使用 Mockito 来让它工作。
似乎已弃用的是 void verify(VerificationMode mode, Verification verification)
,而 void verify(Verification verification, VerificationMode mode)
仍然可以,因此您可以使用 verify
方法,例如
dummyStatic.verify(
() -> SomePublicClass.myPublicStaticFunc(anyInt()),
times(1)
);
我使用了以下依赖项:testImplementation "org.mockito:mockito-inline:3.12.1"
。
看来 mockito-core
你将无法模拟这个,因为你会收到
The used MockMaker SubclassByteBuddyMockMaker does not support the creation of static mocks
我正在尝试在测试中验证是否调用了静态方法。为此,我正在使用 Mockito。
此题与this类似。但是,投票最多的回复中建议的解决方案不再适用,因为 MockedStatic 验证方法已弃用。
try (MockedStatic<SomePublicClass> dummyStatic = Mockito.mockStatic(SomePublicClass.class)) {
dummyStatic.when(() -> SomePublicClass.myPublicStaticFunc(anyInt()))
.thenReturn(5);
// when
System.out.println(SomePublicClass.myPublicStaticFunc(7));
//then
dummyStatic.verify(
times(1),
() -> SomePublicClass.myPublicStaticFunc(anyInt())
);
}
另一种方法是调用
verify(dummyStatic).myPublicStaticFunc(anyInt);
但是,它抱怨方法 myPublicStaticFunc(int) 未定义类型 模拟静态。
我有什么选择,或者我缺少什么。另外,我知道我可以使用 PowerMock 来尝试这个,但目前,我正在尝试仅使用 Mockito 来让它工作。
似乎已弃用的是 void verify(VerificationMode mode, Verification verification)
,而 void verify(Verification verification, VerificationMode mode)
仍然可以,因此您可以使用 verify
方法,例如
dummyStatic.verify(
() -> SomePublicClass.myPublicStaticFunc(anyInt()),
times(1)
);
我使用了以下依赖项:testImplementation "org.mockito:mockito-inline:3.12.1"
。
看来 mockito-core
你将无法模拟这个,因为你会收到
The used MockMaker SubclassByteBuddyMockMaker does not support the creation of static mocks