ich folgenden Code haben die Vorbereitung spottet mein Service zu testen Cassandra mit (Ich brauche com.datastax.driver.core.ColumnDefinitions.Definition
zu verspotten):Mocking ColumnDefinitions.Definition Mock zurückkehrt, ist aber verhält sich wie null in der getesteten Code
@RunWith(PowerMockRunner.class)
public class TestMyClass{
private MyClass target;
@Before
public void setUp() throws Exception {
ColumnDefinitions mockColumnDefinitions=Mockito.mock(ColumnDefinitions.class);
Mockito.when(mockRow.getColumnDefinitions()).thenReturn(mockColumnDefinitions);
target= new MyClass();
Definition mockDef = Mockito.mock(Definition.class);
List<Definition> defList = new ArrayList<Definition>();
defList.add(mockDef);
Iterator mockIterator = Mockito.mock(Iterator.class);
Mockito.when(mockColumnDefinitions.iterator()).thenReturn(mockIterator);
Mockito.when(mockIterator.hasNext()).thenReturn(true, false);
Mockito.when(mockIterator.next()).thenReturn(mockDef);
Mockito.when(mockDef.getName()).thenReturn(NAME);
}
@Test
public void testMyMethod() throws Exception {
target.MyMethod();
}
}
Testausführung geht schön diesen Ort, und ich habe diese Art von Code an verschiedenen Orten, so sollte es funktionieren. Innerhalb des Service, den ich teste ich folgenden Code haben:
ColumnDefinitions colDef = row.getColumnDefinitions();
Iterator<Definition> defIterator = colDef.iterator();
while (defIterator.hasNext()) {
Definition def = defIterator.next();
String columnName = def.getName();
}
Wenn ich diesen Code debuggen, ich sehe, dass beide colDef
und defIterator
erfolgreich verspottet werden. Ich sehe so etwas wie die im Debug-Variablen Bereich:
Mock for Iterator, hashCode: 430126690
Aber nach defIterator.next()
Aufruf ich sehe, dass obwohl def
ein Objekt ist und nicht null ist, es nicht hashcode besagt wie für Iterator
, stattdessen sehe ich:
com.sun.jdi.InvocationException occurred invoking method.
und nach dieser Zeichenfolge Aufruf:
String columnName = def.getName();
ich sofort NullPointerException
wie wenn def nu ll. Was mache ich falsch? Danke.
EDIT 1 ________________________________________________________________________
Ich habe auch versucht stattdessen PowerMockito
mit den gleichen Methoden zu verwenden, das Ergebnis ist das gleiche.
EDIT 2 ________________________________________________________________________
habe ich den ganzen Testmethode Code.
Können Sie kopieren die vollständige Testmethode? – doanduyhai
@doanduyhai Bitte überprüfen, fügte ich hinzu, was herum ist. –