【问题标题】:junit test for methods calling another method of different classjunit测试调用不同类的另一个方法的方法
【发布时间】:2017-02-13 12:04:04
【问题描述】:

我正在使用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);     
}

【问题讨论】:

    标签: java unit-testing junit mockito


    【解决方案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);
      }
    
    }
    

    【讨论】:

      【解决方案2】:

      另一个答案是关于你需要的一个 missing 的嘲笑是正确的。但是:没有您在当前测试用例中的模拟似乎是必需的。

      测试的想法是使用一个(最少的!)设置,其中包含那些真正强制启用测试的步骤。

      模拟 JCheckBox 毫无意义...当您打算测试的方法没有以任何方式使用该复选框时!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-12-15
        • 2019-06-23
        • 2020-05-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多