2017-02-13 4 views
2

Ich schreibe einen JUnit Testfall mit Mockito und ich bekomme eine NullPointerException.JUnit Testfall mit Mockito wirft NullPointerException

UGB

public XRImage getImage(String imgId, List tagList) { 
    _paramsMap.printContent(); 
    return _paramsMap.getImage(imgId, tagList); 
} 

Testcode

@Test 
public void getImageTest() { 
    String imgId = new String("Test"); 
    List requiredTags = null; 
    XRImage xRImage = Mockito.mock(XRImage.class); 
    ImageParamsMap imageParamsMap = Mockito.mock(ImageParamsMap.class); 
    imageParamsMap.addImage(imgId); 
    when(imageParamsMap.getImage(imgId, requiredTags)).thenReturn(Mockito.mock(XRImage.class)); 
    XRImage getImage1 = acquisitionParamsManager.getImage(imgId, requiredTags); 
    assertNotNull(getImage1); 
} 
+1

Wie initialisieren Sie Ihren 'acquisitionParamsManager'? Sie müssen Mock in dieses Objekt injizieren –

+0

ich tat es mit @InjectMocks – bhavya

Antwort

0

Ganz einfach:

List requiredTags = null; 

...

XRImage getImage1=acquisitionParamsManager.getImage(imgId,requiredTags); 

Sie passieren in null für diese Liste! Versuchen Sie stattdessen eine leere Liste. Und wenn das eine java.util.List ist; Sie erstellen tatsächlich einen rohen generischen Typ; und Sie sollten eher etwas wie List<Whatever> stattdessen tun!

0

Erwarten Sie, dass das Pseudoobjekt imageParamsMap statt der _paramsMap Instanzvariable verwendet wird?

Wenn ja, müssen Sie vor dem Aufruf der Methode imageParamsMap auf acquisitionParamsManager setzen. Zum Beispiel gab es unter der Annahme, ein Setter zur Verfügung:

acquisitionParamsManager.setParamsMap(imageParamsMap); 
XRImage getImage1 = acquisitionParamsManager.getImage(imgId, requiredTags); 

Mock Injektion wäre eine weitere Option, wenn keine Setter verfügbar ist. Darüber hinaus ist es schwierig, ohne zusätzlichen Code und/oder Zeilennummern zu debuggen, bei denen die Ausnahme ausgelöst wurde.


Unrelated, aber die addImage() in Ihrem Testfall Aufruf nicht wirklich etwas erreichen. Wenn Sie überprüfen möchten, ob diese Methode aufgerufen wird, versuchen Sie, diese Anweisung nach der Bestätigung hinzuzufügen:

verify(imageParamsMap).addImage(imgId);