Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java junit测试调用不同类的另一个方法的方法_Java_Unit Testing_Junit_Mockito - Fatal编程技术网

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

Java junit测试调用不同类的另一个方法的方法,java,unit-testing,junit,mockito,Java,Unit Testing,Junit,Mockito,我正在使用Mockito为下面的代码编写Junit测试,但是我得到了一个空指针异常。我模拟它的方式有错误吗 public boolean isApplyChecked() { return _rranalysis.getApplytoAllState(); } 我的测试用例是 @Test public void testIsApplyChecked() { JCheckBox Rra_Apply_Field = Mockito.mock(JCheckBox.class);

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

您必须将
RepeatRejectAnalysis
类依赖项注入到
RepeatRejectAnalysis\u侦听器中
。例如:

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

}

另一个答案是正确的,那就是你所需要的一点嘲弄。但是:似乎不需要对当前测试用例进行模拟

测试的思想是使用一个(最小!)设置,该设置正好包含启用测试所必须的步骤

嘲笑JCheckBox是没有意义的。。。当您打算测试的方法没有以任何方式使用该复选框时