2017-02-13 183 views
3

我正在寫Junit測試下面的代碼使用Mockito但我得到一個空指針異常是否有一個錯誤的方式,我嘲笑它?junit測試方法調用不同類的另一種方法

public boolean isApplyChecked() 
{ 
    return _rranalysis.getApplytoAllState(); 
} 

和我的測試用例是

@Test 
public void testIsApplyChecked() { 
    JCheckBox Rra_Apply_Field = Mockito.mock(JCheckBox.class); 
    Mockito.when(Rra_Apply_Field.isSelected()).thenReturn(true); 
    RepeatRejectAnalysis rs = Mockito.mock(RepeatRejectAnalysis.class); 
    Mockito.when(rs.getApplytoAllState()).thenReturn(true); 
    boolean val = repeatRejectAnalysis_Listener.isApplyChecked(); 

    Assert.assertEquals(true, val);  
} 

回答

1

你必須注入RepeatRejectAnalysis類依賴到您的repeatRejectAnalysis_Listener。例如:

使用二傳手

RepeatRejectAnalysis rs =Mockito.mock(RepeatRejectAnalysis.class); 
Mockito.when(rs.getApplytoAllState()).thenReturn(true); 
repeatRejectAnalysis_Listener.setAnalysis(rs); 
boolean val=repeatRejectAnalysis_Listener.isApplyChecked(); 

使用@InjectMocks

public class ListenerTest{ 

    @InjectMocks 
    private Listener repeatRejectAnalysis_Listener = new Listener(); 

    @Mock 
    private RepeatRejectAnalysis rs; 

    @Before 
    public void init(){ 
     MockitoAnnotation.initMocks(this); 
    } 

    // reuse the exact same method as you have now. 
    @Test 
    public void testIsApplyChecked() { 
    JCheckBox Rra_Apply_Field=Mockito.mock(JCheckBox.class); 
    Mockito.when(Rra_Apply_Field.isSelected()).thenReturn(true); 
    RepeatRejectAnalysis rs =Mockito.mock(RepeatRejectAnalysis.class); 
    Mockito.when(rs.getApplytoAllState()).thenReturn(true); 
    boolean val=repeatRejectAnalysis_Listener.isApplyChecked(); 
    Assert.assertEquals(true, val); 
    } 

} 
0

對方回答是關於一個失蹤一片嘲笑,你需要的是正確的。但是:沒有你在當前測試用例中的嘲諷似乎是必需的。

測試的想法是使用一個(最小!)設置,其中包含確切地強制啓用測試的那些步驟。

嘲笑JCheckBox沒有意義......當您打算測試的方法沒有以任何方式使用該複選框時!

相關問題