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();
希望对您有所帮助 ;)
我是 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();
希望对您有所帮助 ;)