@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
    
}

}