2016-05-12 35 views
0

我正在Eclipse Mars 2.0中使用Mockito(1.10.19)进行Java EE测试以测试脱机版本库。该类依赖InitialData类来检索信息。Mockito异常:我的推理在哪里不正确?

我的第一个任务是将一个地址添加到initialData列表。这里是进口类和旁边的方法:

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)); 
    } 
} 

这应该叫AddressRepositoryOffline类getAddresses()方法,随后调用InitialData类的getAddresses()方法,并返回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; 
    } 
} 

我再碰上以下错误:

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) 

37号线的问题是

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

一些更多的错误做JUnit和MockitoJUnitandHigherRunnerImpl

显然,我我误解了如何在这里正确实施Mockito。有人能帮我吗?

非常感谢,

回答

1

你嘲笑没有注入测试类AddressRepositoryOffline

试试这个:

@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

太谢谢你了。 – shirafuno