Mockito NullPointerException 内部方法代码

Mockito NullPointerException Inner Method code

我是 Mockito junit 测试的新手,我遇到了一个问题。如果你们能帮助我,我将不胜感激。

class Activity{
   Connection conn;
   public SomeObject firstMethod() {
          /* *some code*  */
          SomeObject obj = secondMethod();
          return obj;
   }

   public SomeObject secondMethod(){
         /* *some code* */
         PreparedStatement ps = null;

         try{
             ps = conn.createStatement();
             ps.setBytes(1, *someString*);
         }catch(Exception e) { ... }

         /* *some code* */
         return someObject;
   }
}

下面是我写的测试Class。 secondMethod() 的单元测试完美运行。

class ActivityTest{

  Activity activity;
  @Before
  public void setUp(){
     activity = new Activity();
     Connection conn = mock(Connection.class);
     activity.setConnection(conn);
  }

  @Test
  public void testSecondMethod(){
        /*  *works perfectly* */ 
  }

 @Test
 public void testFirstMethod(){

     SomeObject someObj = new SomeObject();

     // *I get error on below line*
     when(activity.secondMethod()).thenReturn(someObj);

     SomeObject result = activity.firstMethod();
     assertEquals(someObj, result);
 }
}

我在 when(activity.secondMethod()).thenReturn(someObj) 上得到一个 NullPOinterException。当我跟踪错误堆栈时,空值是 preparedStatement 对象 ps。它发生在 secondMethod() 中的 ps.setBytes() 上。

这部分我没看懂。为什么我应该因为 ps 为空而出现异常。我已经为包含该代码的 secondMethod() 编写了一个规则。 我是否需要模拟 PreparedStatement obj.模拟所有内部对象也没有意义,因为我已经为它们所在的方法定义了规则。

你们能不能帮帮我。

谢谢

嗯,那是因为您正在调用 secondMethod() 函数的实际实现。确保您可以通过尝试模拟所有内部对象来避免这种情况。

但是,在这种情况下。我认为您也可以尝试使用 doReturn/when 函数而不是 when/thenReturn 函数。

样本是这样的

doReturn(someObj).when(activity).secondMethod();

希望对您有所帮助 ;)