junit测试方法调用另一个不同类的方法

时间:2017-02-13 12:04:05

标签: java unit-testing junit mockito

我正在使用Junit为下面的代码编写Mockito测试但是我得到一个空指针异常是否在我嘲笑它的方式有错误?

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);     
}

2 个答案:

答案 0 :(得分:2)

您必须将RepeatRejectAnalysis类依赖项注入repeatRejectAnalysis_Listener。例如:

使用setter

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);
  }

}

答案 1 :(得分:0)

另一个答案是正确的,你需要一个缺失的嘲笑。但是后来:你当前的测试用例中的模拟的 none 似乎是必需的。

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

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

相关问题