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
}
}
我有一个抽象 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
}
}