Mockito:在特定的类范围中模拟不同的类方法

时间:2018-05-03 15:10:25

标签: java unit-testing mockito

我想和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";
        }
    };

有没有办法隔离特定类范围内的类对象的方法调用?

1 个答案:

答案 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方法中删除静态调用并使用构造函数传递工厂,这样您就可以轻松地模拟它,仅为单个类设置模拟对象。

希望它有所帮助!