2016-05-31 21 views
0

Ich schreibe Junit mit Mockito für eine Spring @ Komponente-Klasse. Wenn versucht wird, auf das statische Feld von der letzten konstanten Datei zuzugreifen, die Null-Zeiger-Ausnahme auslöst.Ausnahme beim Abrufen von Werten aus Mocked-Objekt mit Mockito

CruserDomainTest

@RunWith(MockitoJUnitRunner.class) 
public class CruserTest { 
    @InjectMocks 
    CruserDomain eDomain = new CruserDomain(); 

    @Test 
    public void testGetCruseById() throws Exception, 
      { 
     String cCode = "AA"; 
     int employeeId = 21305; 
     when(
       cruseRepository.getTestId(
         anyString(), anyInt())).thenReturn(
       buildAndReturnList()); 
     when(
       payDomain.getRefPay(anyString(), 
         anyString(), anyString(), anyString())) 
       .thenReturn(buildPay()); 
     CruseMember expectedResponse = eDomain.getMemberById(
       airlineCode, employeeId); 


    } 

CruserDomain

//getting null pointer exception in the below line execution 
//while getting the current month 

public CruseMember getMemberById(String cCode, int employeeId) 
     throws Exception { 

    //Some code // 

     if (contractMonth.getType().equals(
        CruseConstant.CURRENT_MONTH)) { 
       currentMonthStartDate = cMonth.getStartDate(); 
      } else if (contractMonth.getType().equals(
        CruseConstant.OTHER_MONTH)) { 
       nextMonthStartDate = cMonth.getStartDate(); 
      } 

CruseConstant:

public final class CruseConstant { 

    public static final String CURRENT_MONTH = "C"; 
    public static final String OTHER_MONTH = "O"; 
    } 

ich mit ReflectionTestutils versucht, aber Ausnahme während junit beginnt zu werfen.

Helfen Sie mir bei der Suche nach finalen statischen Klassenvariablen in der injectMocked-Klasse.

+0

'@ InjectMocks' ist bekannt, dass es im Hintergrund fehlschlägt, wenn keine Abhängigkeit injiziert werden kann. Haben Sie versucht, eine '@ Before'-Methode in Ihrem Test zu implementieren und die Abhängigkeiten selbst zu verfälschen? –

+0

Ich habe @Before Reflection Test utils benutzt, um diese Werte zu setzen, aber Fehler zu bekommen. Gibt es einen anderen Weg als Reflection testutil, um Werte für diese Konstanten zu setzen. – Ramkumar

+0

Statiken sollten nicht mit Mockito verspottet werden, und Sie brauchen Reflection nicht zu benutzen Setzen Sie die Konstanten, lassen Sie die Methode nur die reellen Konstanten verwenden. –

Antwort

1

Ich rate Ihnen dringend, Domänenobjekte nicht zu verspotten, stattdessen würde ich Builder erstellen, die diese Objekte generieren können.


Auch im Code-Schnipsel @InjectMocks keine Mock, zu injizieren, hat so spritzt nichts, sollte Mock Felder in der Testklasse deklariert werden. Allerdings betone ich den Punkt, die Domain nicht zu verspotten!

Wir haben diese Seite geschrieben, wie man gute Tests schreibt, ich denke, TDD-Praktizierende sollten es lesen, ob sie Mockito benutzen oder nicht. Viele Leute haben dazu beigetragen, diese Wiki-Seite zu verfeinern.

=>https://github.com/mockito/mockito/wiki/How-to-write-good-tests

0

Es ist wirklich schwer, den Code zu verstehen, weil Sie die interessanten Teile mit Kommentaren ersetzt haben, aber ich würde vermuten, dass Sie eine NPE bekommen, weil

contractMonth 

null ist. Das liegt daran, dass Sie das Verhalten der Klasse, von der Sie die contractMonth-Komponente (CruserRepository?) Erhalten, nicht falsch und/oder vergessen haben zu definieren.

Verwandte Themen