MockStatic 测试 returns 一个 int 数组的静态方法
MockStatic test a static method that returns an int array
我的函数
class A {
public static int[] getArray(String text) { return new int[]{0,3}; }
}
测试方法:
private static MockedStatic<A> mock;
@Test
public void Should_return_array_getArray() {
mock
.when(() -> A.getArray(text)) // line: 58
.thenReturn(new int[] {0, 3});
final int[] values = A.getArray(text);
System.out.println("value:"+ values[1]);
assertEquals(3, values[1]);
}
出现以下错误:
org.mockito.exceptions.misusing.MissingMethodInvocationException at StringTest.java:58
我不确定你要测试什么..因为你的实际方法没有任何参数但在测试用例中你试图传递 text
变量...
如果你想测试实际的方法执行,你不需要模拟。以下是测试目标方法的实际调用以及模拟的示例:
@Test
public void test_actual_static_method() {
final int[] values = A.getArray();
Assertions.assertEquals(3, values[1]);
}
@Test
public void test_mocked_static_method() {
MockedStatic<A> aMockedStatic = Mockito.mockStatic(A.class);
aMockedStatic.when(A::getArray).thenReturn(new int[] {100,200});
Assertions.assertEquals(200, A.getArray()[1]);
}
你还需要mockito-inline
图书馆
@Test
public void test_mocked_static_method_with_args() {
try(MockedStatic<A> aMockedStatic = Mockito.mockStatic(A.class)) {
aMockedStatic.when(() -> A.getArrayWithArg("s1")).thenReturn(new int[]{100, 200});
Assertions.assertEquals(200, A.getArrayWithArg("s1")[1]);
}
}
谢谢@Subhash ...你建议的解决方案有效:)
但我调用了“.thenCallRealMethod()”
@Test
public void Should_return_truth_getArray() {
try ( MockedStatic<A> mocked = mockStatic(A.class)) {
mocked
.when(() -> A.getArray(text))
.thenCallRealMethod();
final int[] values = A.getArray(text);
System.out.println("value:"+ values[1]);
assertEquals(3, values[1]);
}
}
我的函数
class A {
public static int[] getArray(String text) { return new int[]{0,3}; }
}
测试方法:
private static MockedStatic<A> mock;
@Test
public void Should_return_array_getArray() {
mock
.when(() -> A.getArray(text)) // line: 58
.thenReturn(new int[] {0, 3});
final int[] values = A.getArray(text);
System.out.println("value:"+ values[1]);
assertEquals(3, values[1]);
}
出现以下错误:
org.mockito.exceptions.misusing.MissingMethodInvocationException at StringTest.java:58
我不确定你要测试什么..因为你的实际方法没有任何参数但在测试用例中你试图传递 text
变量...
如果你想测试实际的方法执行,你不需要模拟。以下是测试目标方法的实际调用以及模拟的示例:
@Test
public void test_actual_static_method() {
final int[] values = A.getArray();
Assertions.assertEquals(3, values[1]);
}
@Test
public void test_mocked_static_method() {
MockedStatic<A> aMockedStatic = Mockito.mockStatic(A.class);
aMockedStatic.when(A::getArray).thenReturn(new int[] {100,200});
Assertions.assertEquals(200, A.getArray()[1]);
}
你还需要mockito-inline
图书馆
@Test
public void test_mocked_static_method_with_args() {
try(MockedStatic<A> aMockedStatic = Mockito.mockStatic(A.class)) {
aMockedStatic.when(() -> A.getArrayWithArg("s1")).thenReturn(new int[]{100, 200});
Assertions.assertEquals(200, A.getArrayWithArg("s1")[1]);
}
}
谢谢@Subhash ...你建议的解决方案有效:) 但我调用了“.thenCallRealMethod()”
@Test
public void Should_return_truth_getArray() {
try ( MockedStatic<A> mocked = mockStatic(A.class)) {
mocked
.when(() -> A.getArray(text))
.thenCallRealMethod();
final int[] values = A.getArray(text);
System.out.println("value:"+ values[1]);
assertEquals(3, values[1]);
}
}