【发布时间】:2017-07-21 10:35:20
【问题描述】:
我正在尝试使用 Mockito 创建一个从 Mock 对象返回的 Mock 对象。具体来说,我正在尝试模拟我的程序可以用来检索 IP 地址的PlayerConnection 对象。
你可以找到更多关于这个PlayerConnection objecthere。它返回一个InetSocketAddress,然后可以返回一个InetAddress,它可以返回一个带有播放器IP的String。但我做不到那么远,因为我的第一个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;
}
【问题讨论】:
-
我不明白。你有同样的错误,同样的答案是使用
doReturn(inetSocketAddress).when(playerConnection).getAddress(),就像提到的那样,你没有这样做(那么你怎么能说它没有帮助呢?)。 -
对不起;我的意思是它导致了另一个错误。编辑原始帖子。
标签: java unit-testing mockito