Mockito 例外:我的推理在哪里不正确?
Mockito exceptions: where is my reasoning incorrect?
我在 Eclipse mars 2.0 中使用 Mockito(1.10.19) 进行 Java EE 测试以测试离线存储库。 class 依赖 InitialData class 来检索信息。
我的第一个任务是向 initialData 列表添加一个地址。这是 class 和导入旁边的方法:
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 class getAddresses() 方法,该方法随后调用 InitialData class 的 getAddresses() 方法和 return 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。有人可以帮我吗?
非常感谢,
你的模拟没有被注入测试class 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));
}
}
我在 Eclipse mars 2.0 中使用 Mockito(1.10.19) 进行 Java EE 测试以测试离线存储库。 class 依赖 InitialData class 来检索信息。
我的第一个任务是向 initialData 列表添加一个地址。这是 class 和导入旁边的方法:
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 class getAddresses() 方法,该方法随后调用 InitialData class 的 getAddresses() 方法和 return 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。有人可以帮我吗?
非常感谢,
你的模拟没有被注入测试class 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));
}
}