如何使用Mockito模拟超类中的字段?

时间:2019-04-08 16:00:30

标签: java unit-testing mockito

我有一个MyClass,其中有一个字段MyService myService

现在,我正在通过扩展类来测试该类。即MyClassTest extends MyClass

我的问题是,如何告诉Mockito模拟myService

谢谢

2 个答案:

答案 0 :(得分:1)

如果无法从外部访问此字段,则有两个选项:反射和...反射。

示例1: 使用org.mockito.internal.util.reflection.FieldSetter

MyClass m = new MyClass();
FieldSetter.setField(m, m.getClass().getDeclaredField("myService"), yourService);

示例2: 标准Java的反映:

MyClass m = new MyClass();
Field f = m.getClass().getDeclaredField("myService");
f.setAccessible(true);
f.set(m, yourService);

答案 1 :(得分:1)

您可以如下模拟服务。

这些是您应该拥有的进口商品

import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;

这是测试

MyClass myClass = new MyClass();

// Mock the service
MyService myService = mock(MyService.class);
// Write the behavior of the mocked service.
when(myService.myMethod()).thenReturn(someOutputObjectThatShouldBeReturned)

// Set the mocked service to your class.
Whitebox.setInternalState(myClass, "myService", myService)