проверить, был ли объект успешно добавлен в массив junit - PullRequest
0 голосов
/ 03 ноября 2018

Я пытаюсь добавить объект 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 голосов
/ 03 ноября 2018

Когда создается объект 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)

0 голосов
/ 03 ноября 2018

Ваш «Список» - это массив с фиксированным размером (3 элемента). Вы не можете увеличить массив после его выделения. Вы должны выделить новый. Я предлагаю вам использовать ArrayList вместо вашего массива.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...