测试对象是否已成功添加到数组junit中

时间:2018-11-02 21:58:37

标签: java arrays object junit

我正在尝试将Spherocylinder对象添加到数组中。之后,我想在junit中对其进行测试,以验证该对象是否已成功添加到数组中。我遇到的问题是,每当我尝试运行junit测试时,我都会遇到异常异常错误。这是我方法中的代码。

public class SpherocylinderList {

//instance variables.
   private String listName;
   private Spherocylinder[] sList;
   private int numberOfSpherocylinders;

   /**
    *Constructor for SpherocylinderList.
    * @param listNameIn - incoming objects.
    * @param sListIn - name of list.
    * @param numberOfSpherocylindersIn - number of objects.
    */
   public SpherocylinderList(String listNameIn, Spherocylinder[] sListIn, 
      int numberOfSpherocylindersIn) {

      listName = listNameIn;
      sList = sListIn;
      numberOfSpherocylinders = numberOfSpherocylindersIn;
   }

/**
    * Method to return total number of Spherocylinders.
    * @return numberOfSpherocylinders - total number of ojbects.
    */
   public int numberOfSpherocylinders() {
      return numberOfSpherocylinders;  
   }

public void addSpherocylinder(String labelIn, double radiusIn,  
      double cylinderHeightIn) {

      Spherocylinder s = new Spherocylinder(labelIn, radiusIn, 
         cylinderHeightIn);
      sList[numberOfSpherocylinders] = s;
      numberOfSpherocylinders++;
   }

这是我的Junit测试方法。

@Test public void addSpherocylinderTest() {
      Spherocylinder s1 = new Spherocylinder("Small Example", 0.5, 0.25);
      Spherocylinder s2 = new Spherocylinder("Medium Example", 10.8, 10.1);
      Spherocylinder s3 = new Spherocylinder("Large Example", 98.32, 99.0);
      Spherocylinder[] sList = {s1, s2, s3};
      SpherocylinderList s = new SpherocylinderList("test", sList, sList.length);
      s.addSpherocylinder("test2", 10.9, 10.2);
      Assert.assertEquals(4, s.numberOfSpherocylinders());
   }

我遇到错误

java.lang.ArrayIndexOutofBoundsException: 3

运行测试时。如何正确测试添加对象?我还想补充一点,我不能使用ArrayList。

2 个答案:

答案 0 :(得分:0)

您的“ sList”是一个具有固定维度(3个元素)的数组。分配数组后就无法增加数组。您必须分配一个新的。我建议您使用ArrayList代替数组。

答案 1 :(得分:0)

创建SpherocylinderList对象时,其sList数组将初始化为仅具有空间,该空间可用于提供给它的3个元素。

在addSpherocylinder(string,double,double)方法中添加另一个元素时,它尝试访问sList [3],但是由于sList初始化为只有三个点(索引分别为0、1、2),这会引发异常。

一种方法可能是使用arrayList而不是sList的数组,因为在达到某个项目的容量后插入该项目时,容量会自动增加。

private ArrayList<Spherocylinder> sList;

如果您选择执行此操作,则在构造函数中此行

sList = sListIn;可以替换为sList = new ArrayList(sListIn);

addSpheroCylinder方法sList[numberOfSpherocylinders] = s;中的这一行可以替换为sList.add(numberOfSpherocylinders, s)