简体   繁体   English

使用 Mockito 验证 static 方法调用

[英]Verify static method calls with Mockito

I am trying to verify in a test that a static method is called.我正在尝试在测试中验证是否调用了 static 方法。 I am using Mockito for this purpose.为此,我正在使用 Mockito。

This question is similar to this .这个问题与类似。 However, the solution suggested in the most upvoted reply is not applicable anymore as the MockedStatic verify method is deprecated.但是,投票最多的回复中建议的解决方案不再适用,因为 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())
);
}

The alternative is to call另一种方法是打电话

verify(dummyStatic).myPublicStaticFunc(anyInt);

However, it complains that the method myPublicStaticFunc(int) is undefined for the type MockedStatic.然而,它抱怨说 myPublicStaticFunc(int) 方法对于 MockedStatic 类型是未定义的。

What are my alternatives, or what am I missing.我有什么选择,或者我错过了什么。 Also, I know I can try this using PowerMock, but for the moment, I am trying to get this working using Mockito only.另外,我知道我可以使用 PowerMock 来尝试这个,但目前,我正在尝试仅使用 Mockito 来让它工作。

It seems that deprecated is void verify(VerificationMode mode, Verification verification) while void verify(Verification verification, VerificationMode mode) is still fine so you can just use the verify method like似乎已弃用的是void verify(VerificationMode mode, Verification verification)void verify(Verification verification, VerificationMode mode)仍然可以,因此您可以使用类似的verify方法

dummyStatic.verify(
    () -> SomePublicClass.myPublicStaticFunc(anyInt()),
    times(1)
);

I've used the following dependency: testImplementation "org.mockito:mockito-inline:3.12.1" .我使用了以下依赖项: testImplementation "org.mockito:mockito-inline:3.12.1"

It seems that with mockito-core you will not be able to mock this because you'll receive似乎使用mockito-core你将无法模拟它,因为你会收到

The used MockMaker SubclassByteBuddyMockMaker does not support the creation of static mocks使用的 MockMaker SubclassByteBuddyMockMaker 不支持创建 static mocks

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM