@InjectMocks 没有正确注入依赖项
@InjectMocks is not injecting dependencies properly
我有一段代码,其中 @InjectMocks 无法添加二级模拟依赖项。
public class Token{
//setters getters and logic
}
public class TokenManager{
public Token getToken(){
//Some logic to return token
}
}
public class MyClass {
private TokenManager tmgr;
public MyClass(TokenManager tmgr){
this.tmgr = tmgr;
}
public void doLogic(){
Token token = tmgr.getToken();
String tokenStr = token.getString();
//Logic
}
}
@Run(MockitoJunit4)
public class MyClassTest{
@Mock
TokenManager tmgr;
@Mock
Token token;
@InjectMocks
MyClass myClass;
@Begin
public void setup(){
MockitoAnnotations.initMocks(this);
}
@Test
public void doLogicTest{
String sometestStr = "ABCD";
when(tmg.getToken()).thenReturn(token);
when(token.getString()).thenReturn(sometestSTR);
myClass.doLogic();
//some asserts
}
}
代码返回 NullPointer 在
String tokenStr = token.getString()
因此,我无法进行 Junit 测试。如果我通过 MyClass 的构造函数添加这些模拟依赖项,它会起作用
您的示例在注释和模拟对象方面存在一些问题。尝试像这样更改测试 class 中的代码:
public class MyClassTest {
@Mock
TokenManager tmgr;
@InjectMocks
MyClass myClass;
@Before
public void setup(){
initMocks(this);
}
@Test
public void doLogicTest {
Token token = mock(Token.class);
String sometestStr = "ABCD";
when(tmg.getToken()).thenReturn(token);
when(token.getString()).thenReturn(sometestSTR);
myClass.doLogic();
//some asserts
}
}
我有一段代码,其中 @InjectMocks 无法添加二级模拟依赖项。
public class Token{
//setters getters and logic
}
public class TokenManager{
public Token getToken(){
//Some logic to return token
}
}
public class MyClass {
private TokenManager tmgr;
public MyClass(TokenManager tmgr){
this.tmgr = tmgr;
}
public void doLogic(){
Token token = tmgr.getToken();
String tokenStr = token.getString();
//Logic
}
}
@Run(MockitoJunit4)
public class MyClassTest{
@Mock
TokenManager tmgr;
@Mock
Token token;
@InjectMocks
MyClass myClass;
@Begin
public void setup(){
MockitoAnnotations.initMocks(this);
}
@Test
public void doLogicTest{
String sometestStr = "ABCD";
when(tmg.getToken()).thenReturn(token);
when(token.getString()).thenReturn(sometestSTR);
myClass.doLogic();
//some asserts
}
}
代码返回 NullPointer 在
String tokenStr = token.getString()
因此,我无法进行 Junit 测试。如果我通过 MyClass 的构造函数添加这些模拟依赖项,它会起作用
您的示例在注释和模拟对象方面存在一些问题。尝试像这样更改测试 class 中的代码:
public class MyClassTest {
@Mock
TokenManager tmgr;
@InjectMocks
MyClass myClass;
@Before
public void setup(){
initMocks(this);
}
@Test
public void doLogicTest {
Token token = mock(Token.class);
String sometestStr = "ABCD";
when(tmg.getToken()).thenReturn(token);
when(token.getString()).thenReturn(sometestSTR);
myClass.doLogic();
//some asserts
}
}