我有这个服务接口(interface)
public interface ABC {
public String getAbc();
}
我有这个使用这个服务的 Controller
public class Do {
@Inject ABC abc;
public String doAbc() {
String a = abc.getAbc();
}
}
在我的单元测试中,我希望能够模拟出这个 ABC 而不必提供实际的实现。这是有效的:
public class TestDo {
@Mock
private Do do;
@Mock
private ABC abc;
@Before
public void init() {
MockitoAnnotations.initMocks(this);
do.abc = abc;
}
@Test
public void testDo() {
when(do.doAbc()).thenCallRealMethod();
do.doAbc();
assertSomething...
}
}
但是我不想做的是
do.abc = abc;
,从我所有的搜索中,为了做@InjectMock,我需要提供一个具体的类。有没有办法让我使用该接口(interface),但又能够将模拟接口(interface)注入(inject)到 do 中,而无需在 Do Class 中暴露我的 ABC 注入(inject)?我想让 ABC 成为私有(private)变量,并且仍然能够通过 Mockito 注入(inject)接口(interface)。
最佳答案
public interface ABC {
public String getAbc();
}
public class Do {
@Inject
ABC abc;
public String doAbc() {
System.out.println("Injected abc is " + (abc == null ? "null" : "not null"));
return abc.getAbc();
}
}
public class TestDo {
@Mock
private ABC abc;
@InjectMocks
private Do ddo;
@Before
public void init() {
MockitoAnnotations.initMocks(this);
}
@Test
public void simpleTest() {
System.out.println(ddo.doAbc());
}
}
输出是:
Injected abc is not null
null
关于java - 如何模拟@Inject 接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35325403/