如何模拟具有多个参数的静态方法
How to mock static methods with more than one argument
我正在编写一个测试用例来测试调用接受 5 个参数的静态方法的组件。我想知道我该怎么做。
早些时候我已经成功地模拟了带有 0 和 1 个参数的静态方法。但是,当我模拟具有多个参数的静态方法时,它 returns 为空。以下是我正在尝试做的简化版本。静态方法有 2 个参数。
public interface VO {
}
public class A implements VO {
private int value = 5;
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
}
public class Factory {
public static VO getObj(String a, String b) {
return new A();
}
}
@RunWith(PowerMockRunner.class)
@PrepareForTest({com.csc.fsg.nba.vo.Factory.class})
public class APITest {
@BeforeClass
public static void runOnceBeforeClass() throws Exception {
System.out.println("Executing runOnceBeforeClass()");
A a = new A();
a.setValue(3);
PowerMockito.mockStatic(Factory.class);
Mockito.when(Factory.getObj(Mockito.any(String.class), Mockito.any(String.class))).thenReturn(a);
}
@Test
public void testA() throws Exception {
VO vo = Factory.getObj("a", null);
System.out.println(((A)vo).getValue());
}
}
我希望 sysout 应该打印 3,但是 vo 为空。
在这种特殊情况下,any(String.class)
与执行测试时通过的 null
不匹配
//...
VO vo = Factory.getObj("a", null);
//...
使用anyString()
//...
when(Factory.getObj(anyString(), anyString())).thenReturn(a);
我正在编写一个测试用例来测试调用接受 5 个参数的静态方法的组件。我想知道我该怎么做。
早些时候我已经成功地模拟了带有 0 和 1 个参数的静态方法。但是,当我模拟具有多个参数的静态方法时,它 returns 为空。以下是我正在尝试做的简化版本。静态方法有 2 个参数。
public interface VO {
}
public class A implements VO {
private int value = 5;
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
}
public class Factory {
public static VO getObj(String a, String b) {
return new A();
}
}
@RunWith(PowerMockRunner.class)
@PrepareForTest({com.csc.fsg.nba.vo.Factory.class})
public class APITest {
@BeforeClass
public static void runOnceBeforeClass() throws Exception {
System.out.println("Executing runOnceBeforeClass()");
A a = new A();
a.setValue(3);
PowerMockito.mockStatic(Factory.class);
Mockito.when(Factory.getObj(Mockito.any(String.class), Mockito.any(String.class))).thenReturn(a);
}
@Test
public void testA() throws Exception {
VO vo = Factory.getObj("a", null);
System.out.println(((A)vo).getValue());
}
}
我希望 sysout 应该打印 3,但是 vo 为空。
在这种特殊情况下,any(String.class)
与执行测试时通过的 null
不匹配
//...
VO vo = Factory.getObj("a", null);
//...
使用anyString()
//...
when(Factory.getObj(anyString(), anyString())).thenReturn(a);