Тестирование Junit с несколькими операторами if

Эй, я застрял в этом домашнем задании. Мне трудно со многими заявлениями if. Был бы рад за некоторую помощь. веселит. Идея тестирования junit заключается в том, что вы вызываете методы и тестируете переменные.

package testing;

import java.util.Map.Entry;

public class HashMap<K,V> {
 static final int MAXIMUM_CAPACITY = 1 << 10;
 transient Entry<K,V>[] table;
 int threshold;
 final float loadFactor;

public HashMap(int initialCapacity, float loadFactor) {
  if (initialCapacity < 0)
    throw new IllegalArgumentException("Illegal initial capacity: " +
  initialCapacity);
  if (initialCapacity > MAXIMUM_CAPACITY)
    initialCapacity = MAXIMUM_CAPACITY;
  if (loadFactor <= 0 || Float.isNaN(loadFactor))
    throw new IllegalArgumentException("Illegal load factor: " + loadFactor);

  // Find a power of 2 >= initialCapacity
  int capacity = 1;
  while (capacity < initialCapacity)
   capacity <<= 1;
 this.loadFactor = loadFactor;
 threshold = (int)(capacity * loadFactor);
 table = new Entry[capacity];
}

public int getCapacity() {
  return table.length;
}
}

Всего 1 ответ


Ну, в реальном мире, вы бы предпочли работать наоборот: вы бы сделали TDD. Значение: вы думаете о (идеально небольшой) функции, которую должен иметь ваш производственный код. Затем вы пишете тест для этого и проверяете, что тест не пройден. Затем вы реализуете функцию, и теперь тест должен пройти.

Написание тестов «после фактов» чаще всего менее полезно. Но в целом: ничего страшного. Вы можете посмотреть на свой код и понаблюдать за тем, что делает. Затем вы пишете тесты, чтобы проверить это поведение.

Подобно:

@Test(expected=IllegalArgumentException.class)
public void testWithNegativeCapacity() {
  new HashMap<String, String>(-1, 0.5);
}

Сначала вы пишете тесты, которые проверяют, что ваш код, который проверяет вводимые данные, работает как положено.

Тогда вы продолжите, например, как

@Test
public void testForExpectedCapacity() {
  assertThat(new HashMap<String, String>(10, 0.5).getCapacity(), is(whatever));
}

Куда:

  • assertThat является одним из многих «утверждений», которые вы можете использовать
  • is() - средство сравнения Hamcrest, которое вы используете с assertThat, что приводит к читаемому тестовому коду
  • каким бы значением вы не ожидали, что емкость будет при вызове этого конструктора с 10 и 0,5 (мне лень вычислять реальный ожидаемый результат)

Наконец, конечно, вы можете посмотреть на реализацию производственного кода для получения тестов. Но вы также должны посмотреть на контракт этого кода.

Например, его документация: попытайтесь понять, что должен делать код, и напишите тесты, которые проверяют, действительно ли эти утверждения «когда вы делаете это, код выполняет это».

Обе стороны важны, и только вместе вы можете получить полный набор тестов. Вы хотите убедиться, что код делает то, что должен, и вы хотите убедиться, что «как это сделано» правильно!


Есть идеи?

10000