Ich versuche, Mockito zu verwenden, um ein Mock-Objekt zu erstellen, das von einem Mock-Objekt zurückgegeben wird. Insbesondere versuche ich ein Objekt PlayerConnection
zu verspotten, das mein Programm verwenden kann, um eine IP-Adresse abzurufen.Mockito when(). ThenReturn() löst nullpointerExceptions
Sie können mehr über diese here finden. Es gibt eine InetSocketAddress
zurück, die dann eine InetAddress
zurückgeben kann, die eine String
mit der IP des Players zurückgeben kann. Aber ich kann nicht so weit kommen, weil mein erster when(class.function()).thenReturn(returnVariable)
einen NullPointerException
wirft. Hier ist mein Code:
/**
* 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;
}
Und hier ist der Stack-Trace, bei when(playerConnection.getAddress()).thenReturn(inetSocketAddress)
auftreten:
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)
Edit:
Ich habe meinen Stubs doReturn().when().function()
statt when().thenReturn()
geschaltet, um die NullPointerExceptions
zu stoppen, und es tat, aber jetzt bekomme ich benutzerdefinierte UnfinishedStubbingExceptions
von Mockito.
Der hilfreiche Fehlercode sagt, dass ich irgendwo einen unvollendeten Stummel habe, aber ich sehe nicht, wo es ist. Der Fehler tritt bei der zweiten Methode doReturn()
auf.
/**
* 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;
}
Siehe http: // stackoverflow.com/questions/34308877/how-to-mock-Methode-Aufruf-und-Rückgabewert-ohne-run-the-Methode. – Tunaki
Ich verstehe es nicht. Sie haben den gleichen Fehler und die gleiche Antwort ist 'doReturn (inetSocketAddress) .when (playerConnection) .getAddress()' wie erwähnt, und Sie tun das nicht (also wie können Sie sagen, dass es nicht geholfen hat?). – Tunaki
Entschuldigung; Was ich sagen wollte, war, dass es einen weiteren Fehler verursachte. Originalpost bearbeiten –