2016-05-12 17 views
0

Ich benutze Mockito (1.10.19) in Eclipse Mars 2.0 für Java EE Tests, um ein Offline-Repository zu testen. Diese Klasse benötigt eine InitialData-Klasse, um Informationen abzurufen.Mockito Ausnahmen: Wo ist meine Argumentation falsch?

Meine erste Aufgabe ist das Hinzufügen einer Adresse zur initialData-Liste. Hier ist das Verfahren neben der Klasse und Importe:

import org.junit.Test; 
import org.junit.runner.RunWith; 
import org.mockito.Mockito; 
import org.mockito.runners.MockitoJUnitRunner; 

import com.qa.smurf.InitialData; 
import com.qa.smurf.entities.Address; 
import com.qa.smurf.repositories.offline.AddressRepositoryOffline; 

import junit.framework.TestCase; 
@RunWith(MockitoJUnitRunner.class) 
public class AddressRepositoryOfflineTest extends TestCase { 
    @Test 
    public void testPersistAddress() { 
     Address newAddress = new Address("a", "a"); 
     ArrayList<Address> addList = new ArrayList<Address>(); 
     addList.add(newAddress); 

     AddressRepositoryOffline aro = Mockito.mock(AddressRepositoryOffline.class); 
     InitialData initialData = Mockito.mock(InitialData.class); 
     Mockito.when(initialData.getAddresses()).thenReturn(addList); 
     assertEquals(newAddress, aro.getAddresses().get(0)); 
    } 
} 

Welche AddressRepositoryOffline Klasse getAddresses nennen sollte() -Methode, die anschließend ruft die InitialData Klasse getAddresses() Methode und geben die addList Arraylist.

public class AddressRepositoryOffline implements AddressRepository { 
    @Override 
    public ArrayList<Address> getAddresses() { 
     return initialData.getAddresses(); 
    } 
} 

public class InitialData { 
    public ArrayList<Address> getAddresses() { 
     return this.addresses; 
    } 
} 

Ich laufe dann in die folgenden Fehler:

java.lang.IndexOutOfBoundsException: Index: 0, Size: 0 
at java.util.ArrayList.rangecheck(ArrayList.java:653) 
at java.util.ArrayList.get(ArrayList.java:429) 
at OfflineRepository.AddressRepositoryOfflineTest.testPersistAddress(AddressRepositoryTest.java:37) 

Linie 37 in Frage

assertEquals(newAddress, aro.getAddresses().get(0)); 

mit einigen mehr Fehler mit JUnit und MockitoJUnitandHigherRunnerImpl zu tun

Klar I Ich verstehe nicht, wie man Mockito richtig implementiert. Könnte mir jemand helfen?

Vielen Dank,

Antwort

1

Ihre Mocks sind nicht in Klasse getestet AddressRepositoryOffline injiziert

Try this:

@RunWith(MockitoJUnitRunner.class) 
public class AddressRepositoryOfflineTest extends TestCase { 

@Mock 
private InitialData initialData; 

@InjectMocks 
private AddressRepositoryOffline aro; 

@Test 
public void testPersistAddress() { 
    Address newAddress = new Address("a", "a"); 
    ArrayList<Address> addList = new ArrayList<Address>(); 
    addList.add(newAddress); 

    Mockito.when(initialData.getAddresses()).thenReturn(addList); 
    assertEquals(newAddress, aro.getAddresses().get(0)); 
} 
} 
+0

Sie so viel Dank. – shirafuno