我试图用Mockito来创建一个Mock对象,该对象从Mock对象中返回。具体来说,我试图嘲笑我的程序可用于检索IP地址的PlayerConnection
对象。Mockito when()。thenReturn()throws nullpointerExceptions
你可以找到更多关于这个PlayerConnection object
here。它返回一个InetSocketAddress
,然后可以返回一个InetAddress
,它可以返回String
与播放器的IP。但我不能得到那么多,因为我的第一个when(class.function()).thenReturn(returnVariable)
抛出一个NullPointerException
。这里是我的代码:
/**
* Creates a partial mock of a connection that can return an ip address.
*
* @param String
* The IP to return when the connection gets asked.
* @return
*/
private PlayerConnection newConnection(String ipString)
{
PlayerConnection playerConnection = mock(PlayerConnection.class);
InetSocketAddress inetSocketAddress = mock(InetSocketAddress.class);
InetAddress inetAddress = mock(InetAddress.class);
when(playerConnection.getAddress()).thenReturn(inetSocketAddress);
when(inetSocketAddress.getAddress()).thenReturn(inetAddress);
when(inetAddress.getHostAddress()).thenReturn(ipString);
return playerConnection;
}
而这里的堆栈跟踪,存在的在when(playerConnection.getAddress()).thenReturn(inetSocketAddress)
:
Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.001 sec <<< FAILURE!
ruleResponseTest(com.github.heartsemma.communitywall.ConnectionChecks.RuleManagerTest) Time elapsed: 0.001 sec <<< ERROR!
java.lang.NullPointerException
at java.net.InetSocketAddress$InetSocketAddressHolder.access$500(InetSocketAddress.java:56)
at java.net.InetSocketAddress.getAddress(InetSocketAddress.java:334)
at com.github.heartsemma.communitywall.ConnectionChecks.RuleManagerTest.newConnection(RuleManagerTest.java:99)
at com.github.heartsemma.communitywall.ConnectionChecks.RuleManagerTest.ruleResponseTest(RuleManagerTest.java:44)
编辑:
我转我的存根doReturn().when().function()
而不是when().thenReturn()
停止NullPointerExceptions
,和它确实,但现在我从Mockito获得定制UnfinishedStubbingExceptions
。
有用的错误代码说我有一个未完成的存根,但我不知道它在哪里。该错误发生在第二个doReturn()
方法上。
/**
* Creates a partial mock of a connection that can return an ip address.
*
* @param ipString The IP to return.
*
* @return A PlayerConnection object that can return a Host Address of the ipString but nothing else.
*/
private PlayerConnection newConnection(String ipString)
{
PlayerConnection playerConnection = mock(PlayerConnection.class);
InetSocketAddress inetSocketAddress = mock(InetSocketAddress.class);
InetAddress inetAddress = mock(InetAddress.class);
doReturn(inetSocketAddress).when(playerConnection).getAddress();
doReturn(inetAddress).when(inetSocketAddress).getAddress();
doReturn(ipString).when(inetAddress).getHostAddress();
return playerConnection;
}
请参阅http:// stackoverflow。COM /问题/ 34308877 /如何对模拟的方法调用和返回值,而无需运行最方法。 – Tunaki
我不明白。你有同样的错误,同样的答案是使用'doReturn(inetSocketAddress).when(playerConnection).getAddress()'就像上面提到的那样,而你没有这样做(所以你怎么能告诉它没有帮助? )。 – Tunaki
对不起,我的意思是说它导致了另一个错误。编辑原始帖子。 –