2016-07-13 16 views
2

Ich lerne gerade EasyMock und ich habe ein paar Tutorials darüber gelesen. Basierend auf dem Wissen, das ich erworben habe, versuche ich eine Scheinliste zu erstellen, aber es gibt mir AssertionError, dessen Grund ich nicht verstehen konnte.Erstellen Sie eine Liste mit EasyMock

Grundsätzlich möchte ich eine Liste haben, deren erstes Element 1133L und 1139L zweite Element ist und die Größe ist es natürlich 2.

Meine Methode

@Test 
public void testCreateIdealConf() 
{ 

List<Long> idList = createMock(List.class); 

expect(idList.get(0)).andReturn(1133L); 
expect(idList.get(1)).andReturn(1139L); 
expect(idList.size()).andReturn(2); 

replay(idList); 

for(int i = 0; i < idList.size(); i++) 
{ 
    System.out.println("Elements: " + idList.get(i)); 
} 
} 

Wenn ich diesen Test ausführen Verfahren, gibt es folgende Fehler

java.lang.AssertionError: 
Unexpected method call List.size(): 
List.get(1): expected: 1, actual: 0 
List.size(): expected: 1, actual: 2 
at org.easymock.internal.MockInvocationHandler.invoke(MockInvocationHandler.java:44) 
at org.easymock.internal.ObjectMethodsFilter.invoke(ObjectMethodsFilter.java:94) 
at com.sun.proxy.$Proxy7.size(Unknown Source) 
at de.psi.passage3.auslieferung.allg.gui.status.CasBarUserConfigurationArrangementsTest.testCreateIdealConf(CasBarUserConfigurationArrangementsTest.java:113) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
at 
the rest of the failure trace is omitted. 

Wo ich einen Fehler machen oder tun, außer ich etwas falsch von einer Mock-Objekt/Liste?

+0

ich nicht EasyMock verwendet haben, aber es sieht aus wie Sie es erwarten sagen 'erhalten (0), get (1), size() ', aber die eigentlichen Methodenaufrufe wären:' size(), get (0), size(), get (1), size() '. – khelwood

+0

@khelwood Jetzt, basierend auf Ihrer Antwort, habe ich getestet und Sie haben Recht. Die Reihenfolge ist auch wichtig :) Wenn Sie Ihren Kommentar als Antwort ändern, wird dies als Lösung akzeptiert. –

+0

Kühl. Froh, dass ich helfen konnte. – khelwood

Antwort

2

Es ist wie Sie es sagen schaut zu erwarten:

get(0) 
get(1) 
size() 

aber die eigentlichen Methodenaufrufe würde:

size() 
get(0) 
size() 
get(1) 
size() 
1

Verwendung anyTimes() -Methode Überprüfung der Abruf und Anruf deaktivieren Hinrichtungen.

expect(idList.get(0)).andReturn(1133L).anyTimes(); 
expect(idList.get(1)).andReturn(1139L).anyTimes(); 
expect(idList.size()).andReturn(2).anyTimes(); 
+0

Vielen Dank für Ihre Antwort. Ich dachte, dass das Überprüfen der Aufrufreihenfolge und der Aufrufausführungen standardmäßig deaktiviert ist, solange createMock anstelle von createStrictMock verwendet wird. –

1

Sie nicht den .size() Anruf in der for-Schleife erwarten, versuchen:

int listSize = 2 ; 
expect(idList.size()).andReturn(listSize).times(listSize+1); 
expect(idList.get(0)).andReturn(1133L); 
expect(idList.get(1)).andReturn(1139L);