Как исправить ошибку «Не удалось вызвать исключение IllArgumentException» в java - PullRequest
0 голосов
/ 11 января 2020

Я пытаюсь написать программу, которая сортирует список из двух целых чисел так, чтобы элементы находились в порядке возрастания, размер списка оставался неизменным, и выдает исключение IllegalArgumentException, если размер списка не равен 2.

Это то, что у меня есть:

public static void sort2(List<Integer> t) { //t is a the list
        if(t.size() < 3) {
            Collections.sort(t);
            System.out.println(t);
        }
        else if (t.size() == 2) {
            throw new IllegalArgumentException("List is empty");
        }
}

Однако, когда я выполняю тест JUnit, сортировка проходит, но тест исключения не выполняется. Тест выглядит следующим образом:

public void test10a_sort2() {
    ArrayList<Integer> t = new ArrayList<>();
    String error = "lab0.sort2(t) failed to throw an IllegalArgumentException";
    try {
      lab0.sort2(t);
      fail(error);
    }
    catch (IllegalArgumentException x) {
      // do nothing
    }
    catch (Exception x) {
      fail("lab0.sort2(t) threw the wrong kind of exception");
    }

    t.add(1);
    try {
      lab0.sort2(t);
      fail(error);
    }
    catch (IllegalArgumentException x) {
      // do nothing
    }
    catch (Exception x) {
      fail("lab0.sort2(t) threw the wrong kind of exception" + x);
    }

    t.add(2);
    t.add(3);
    try {
      lab0.sort2(t);
      fail(error);
    }
    catch (IllegalArgumentException x) {
      // do nothing
    }
    catch (Exception x) {
      fail("lab0.sort2(t) threw the wrong kind of exception");
    }
  }

Не совсем уверен, что я делаю не так. Я также пытался использовать try catch, но, похоже, он тоже не работал.

1 Ответ

2 голосов
/ 11 января 2020
    if(t.size() < 3) {
        // ...
    }
    else if (t.size() == 2) {
        throw new IllegalArgumentException("List is empty");
    }

Вы сгенерируете исключение, только если первое условие ложно, а второе верно, то есть t.size() >= 3 && t.size() == 2. Это явно невозможно, поэтому исключение никогда не будет выброшено.


Сначала поставьте условие, которое выбрасывает исключение:

if (t.size() != 2) {
  throw ...
}

, а затем добавьте все, что нужно, если размер - это 2 после.

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