class 的部分模拟
Partial mocking of a class
Class 正在测试中:
public class A {
public static String m1(String p1, String p2);
public static String m2(String p1, String p2, Object p3) {
//...other work involving p3
String res;
if(conditionA)
{
res = m1(p1,p2);
} else {
res = //something else;
}
//continue work
}
}
详情:
方法 m1 进行数据库调用,对 Hibernate 和 Configs 具有 "inherent"(未注入)依赖性。
存在方法 m1 和 m2 的现有使用者,因此无法更改签名。 m1/m2 还没有编写测试。
conditionA 是一个远程 "controlled" 发射门(我可以模拟)。
if条件是我最近添加的,需要验证方法m2在conditionA的两个值下的行为。
我正在寻找的是一种提供 m1 的模拟实现,同时仍然调用真实方法 m2 的方法。
无论我尝试做什么来模拟 m1,我总是以 PowerMockito 未完成的存根异常结束。
第一种方法:Mockito
你应该做部分模拟。使用 mockito,您可以:
A a = Mockito.spy(A.class);
然后你可以像这样存根你想要模拟的方法:
Mockito.doReturn("result").when(a).m1(...);
另一种方法将保持真实。
第二种方法:PowerMockito
PowerMockito.mockStatic(A.class);
when(A.m1(...)).thenReturn("result");
再一次,另一种方法将保持真实。
Class 正在测试中:
public class A {
public static String m1(String p1, String p2);
public static String m2(String p1, String p2, Object p3) {
//...other work involving p3
String res;
if(conditionA)
{
res = m1(p1,p2);
} else {
res = //something else;
}
//continue work
}
}
详情: 方法 m1 进行数据库调用,对 Hibernate 和 Configs 具有 "inherent"(未注入)依赖性。 存在方法 m1 和 m2 的现有使用者,因此无法更改签名。 m1/m2 还没有编写测试。
conditionA 是一个远程 "controlled" 发射门(我可以模拟)。
if条件是我最近添加的,需要验证方法m2在conditionA的两个值下的行为。
我正在寻找的是一种提供 m1 的模拟实现,同时仍然调用真实方法 m2 的方法。
无论我尝试做什么来模拟 m1,我总是以 PowerMockito 未完成的存根异常结束。
第一种方法:Mockito
你应该做部分模拟。使用 mockito,您可以:
A a = Mockito.spy(A.class);
然后你可以像这样存根你想要模拟的方法:
Mockito.doReturn("result").when(a).m1(...);
另一种方法将保持真实。
第二种方法:PowerMockito
PowerMockito.mockStatic(A.class);
when(A.m1(...)).thenReturn("result");
再一次,另一种方法将保持真实。