Java - Mockito - 如何在测试中将依赖注入抽象

Java - Mockito - how to inject depency into abstract in test

我有一个抽象 class 构造函数中有一个注入服务,我怎么能在单元测试中同时模拟抽象 class 和注入服务,这里是代码示例

public abstract class SomeService {
    private final SomeClient someClient;

    @Inject
    public SomeService(SomeClient someClient) {
        this.someClient = someClient;
    }

    public User myMethod(int uid) {
        User user = someClient.getUserByUid(uid);
        ...
        return user;
    }

这是我想要模拟和测试我的方法的东西

public class SomeServiceTest {
   @Mock
   private SomeService someService;

   @Mock
   private SomeClient someClient;

   @Before
    public void Setup() throws Exception {
        MockitoAnnotations.initMocks(this);
        // here how could I inject my someClient into my someService
        when(someClient.getUserByUid(anyInt).Return(mockedUserObj); 
    }

   @Test
   public void myMethodTest(int uid) {
         User result = someService.myMethod(1);
          //here I want to mock up a response from my someClient that would be equal to mockedUserObj, but the someClient here doesn't seem to be the instance of someService
    }
}

如何将我的 someClient 注入到我的 someService 中,这两个都是模拟的 class?这样我就可以在这里使用相同的模拟客户端实例来模拟内部方法调用响应?

鉴于抽象 类 无法实例化,创建一个仅用于测试目的的具体子类是有意义的。

public class MockSomeService extends SomeService {

}

public class SomeServiceTest {

    @Mock 
    private SomeClient someClient;

    private MockSomeService mockSomeService;

    @Before
    public void setUp() {

        MockitoAnnotations.initMocks(this);
        mockSomeService = new MockSomeService(someClient);
        when(someClient.getUserByUid(Matchers.anyInt()).thenReturn(mockedUserObj);
    }

    @Test
    public void myMethodTest(int uid) {

        // Do stuff
    }
}