Java 如何验证公共类';使用mockito调用的静态方法?
伪代码是这样的Java 如何验证公共类';使用mockito调用的静态方法?,java,mockito,Java,Mockito,伪代码是这样的 rc = SomePublicClass.myPublicStaticFunc(arg) public class SomePublicClass { private SomePublicClass() { } public static int myPublicStaticFunc(arg) { return 5; } } 在UT中,这不起作用 verify(SomePublicClass, times(1)). myPu
rc = SomePublicClass.myPublicStaticFunc(arg)
public class SomePublicClass {
private SomePublicClass() {
}
public static int myPublicStaticFunc(arg) {
return 5;
}
}
在UT中,这不起作用
verify(SomePublicClass, times(1)). myPublicStaticFunc();
由于这是一个公共类,如何在单元测试中验证在mockito中调用myFunc?如果SomePublicClass是一个模拟类,这可以工作。自从Mockito 3.4以来,模拟静态方法就可用了 请参阅拉动请求: 请注意,此功能可用的事实并不等同于建议使用它。它针对的是无法重构源代码的遗留应用程序 尽管如此: 静态方法不带参数时进行测试:
try (MockedStatic<SomePublicClass> dummyStatic = Mockito.mockStatic(SomePublicClass.class)) {
dummyStatic.when(SomePublicClass::myPublicStaticFunc)
.thenReturn(5);
// when
System.out.println(SomePublicClass.myPublicStaticFunc());
//then
dummyStatic.verify(
times(1),
SomePublicClass::myPublicStaticFunc
);
}
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())
);
}
try(MockedStatic dummystic=Mockito.mockStatic(SomePublicClass.class)){
当(SomePublicClass::myPublicStaticFunc)
.然后返回(5);
//什么时候
System.out.println(SomePublicClass.myPublicStaticFunc());
//然后
dummyStatic.verify(
次(1),,
SomePublicClass::myPublicStaticFunc
);
}
静态方法接受参数时进行测试:
try (MockedStatic<SomePublicClass> dummyStatic = Mockito.mockStatic(SomePublicClass.class)) {
dummyStatic.when(SomePublicClass::myPublicStaticFunc)
.thenReturn(5);
// when
System.out.println(SomePublicClass.myPublicStaticFunc());
//then
dummyStatic.verify(
times(1),
SomePublicClass::myPublicStaticFunc
);
}
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())
);
}
try(MockedStatic dummystic=Mockito.mockStatic(SomePublicClass.class)){
dummyStatic.when(()->SomePublicClass.myPublicStaticFunc(anyInt()))
.然后返回(5);
//什么时候
System.out.println(SomePublicClass.myPublicStaticFunc(7));
//然后
dummyStatic.verify(
次(1),,
()->SomePublicClass.myPublicStaticFunc(anyInt())
);
}
自Mockito 3.4以来,就可以使用模拟静态方法
请参阅拉动请求:
请注意,此功能可用的事实并不等同于建议使用它。它针对的是无法重构源代码的遗留应用程序
尽管如此:
静态方法不带参数时进行测试:
try (MockedStatic<SomePublicClass> dummyStatic = Mockito.mockStatic(SomePublicClass.class)) {
dummyStatic.when(SomePublicClass::myPublicStaticFunc)
.thenReturn(5);
// when
System.out.println(SomePublicClass.myPublicStaticFunc());
//then
dummyStatic.verify(
times(1),
SomePublicClass::myPublicStaticFunc
);
}
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())
);
}
try(MockedStatic dummystic=Mockito.mockStatic(SomePublicClass.class)){
当(SomePublicClass::myPublicStaticFunc)
.然后返回(5);
//什么时候
System.out.println(SomePublicClass.myPublicStaticFunc());
//然后
dummyStatic.verify(
次(1),,
SomePublicClass::myPublicStaticFunc
);
}
静态方法接受参数时进行测试:
try (MockedStatic<SomePublicClass> dummyStatic = Mockito.mockStatic(SomePublicClass.class)) {
dummyStatic.when(SomePublicClass::myPublicStaticFunc)
.thenReturn(5);
// when
System.out.println(SomePublicClass.myPublicStaticFunc());
//then
dummyStatic.verify(
times(1),
SomePublicClass::myPublicStaticFunc
);
}
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())
);
}
try(MockedStatic dummystic=Mockito.mockStatic(SomePublicClass.class)){
dummyStatic.when(()->SomePublicClass.myPublicStaticFunc(anyInt()))
.然后返回(5);
//什么时候
System.out.println(SomePublicClass.myPublicStaticFunc(7));
//然后
dummyStatic.verify(
次(1),,
()->SomePublicClass.myPublicStaticFunc(anyInt())
);
}
我不太明白你的问题,你到底想做什么?这对你有帮助吗?不是,要使用mockito,首先需要模拟对象。在我的例子中,它是一个静态方法。那么您需要的是使用PowerMock,也许类似这样的东西?我不太明白你的问题,你到底想做什么?这对你有帮助吗?不是,要使用mockito,首先需要模拟对象。在我的例子中,它是一个静态方法。那么您需要的是使用PowerMock,也许类似这样的东西?