我想和Mockito一起嘲笑
MyServiceClass (这不是实际的代码,只是具有类似意图的假例子)
public String getClassObjects() {
OtherClassObject otherclass = OtherClassObject.createOtherClassObject();
String id = otherclass.getParentObject().getId();
return id;
}
所以基本上我想模仿“。getId()”,但只有在这个类“MyServiceClass”的上下文中,如果我调用的相同方法“getId()”在另一个班级我希望能够模拟不同的回报。
这将在OtherClassObject的每个方法调用中返回“3”
new MockUp<MyServiceClass>() {
@Mock
public String getId(){
return "3";
}
};
有没有办法隔离特定类范围内的类对象的方法调用?
答案 0 :(得分:0)
普通library(rvest)
url <- "https://www.baseball-reference.com/leagues/MLB/2018-standard-batting.shtml"
pg <- read_html(url)
tb <- html_table(pg, fill = TRUE)
df_batting <- tb[[1]]
无法模拟静态调用,因此您需要Mockito
。要实现所需,您应该从模拟对象返回不同的值,如此
PowerMock
因此,您可以根据需要自定义模拟,指定所需的返回值,或将调用传播到实际(实际)方法。
不要忘记在课堂级别使用注释// from your example it's not clear the returned type from getParentObject method.
// I'll call it ParentObj during this example. Replace with actual type.
ParentObj poOne = mock(ParentObj.class);
when(poOne.getId()).thenReturn("3");
ParentObj poTwo = mock(ParentObj.class);
when(poTwo.getId()).thenReturn("10");
...
OtherClassObject otherClassObjectMock = mock(OtherClassObject.class);
// return all your stubbed instances in order
when(otherClassObjectMock.getParentObject()).thenReturn(poOne, poTwo);
PowerMockito.mockStatic(OtherClassObject.class);
when(OtherClassObject.createOtherClassObject()).thenReturn(otherClassObjectMock);
和@RunWith(PowerMockRunner.class)
来激活@PrepareForTest(OtherClassObject.class)
的魔力。
另一个想法是在PowerMock
方法中删除静态调用并使用构造函数传递工厂,这样您就可以轻松地模拟它,仅为单个类设置模拟对象。
希望它有所帮助!