2016-08-25 4 views
-3

Я пытаюсь писать тесты для кода, представленного в http://www.keithschwarz.com/interesting/code/?dir=fibonacci-heapКонструктор вызов должен быть первым оператором в конструкторе, когда нет вызова конструктора на всех

Я застрял в первой строке, хотя. Мой тест выглядит следующим образом:

public class fibonacciHeapTest { 


    fibonacciHeap<Integer> fibHeap= new fibonacciHeap<>(); 

    @Test(expected = HeapEmptyException.class) 
    public void testGetMin() throws HeapEmptyException { 

     System.assert(true, fibHeap.isEmpty()); // Here I get the error mentioned in the title. 

    } 

Кроме той же линии, если смотреть на систему, дает следующее сообщение Int он DropDown: Система не может быть решена в переменную.

Что я делаю неправильно? Спасибо.

+3

Используйте org.junit.Assert, а не System.assert – Jens

+3

Также соблюдайте соглашения об именах Java. Классы начинаются с буквы верхнего регистра. –

+0

@Jens, который тоже не работает. У меня есть следующая ошибка: org.junit не может быть разрешен для типа – dpm

ответ

1

Позволяет дать некоторые более точную обратную связь, чтобы вы собираетесь:

общественного класса FibonacciHeapTest {// как уже упоминалось, UpperCase!

Ваш первый тест может быть:

@Test 
public void testIsEmptyOnNewHeap() { 
    assertThat(new FibonnacciHeap<String>().isEmpty(), is(true)); 
} 

Дело: IsEmpty(), очевидно, должно не бросить исключение, так что вы не хотите «ожидаемое» заявление. Обратите внимание: я обратился к assertThat и hamcrest is matcher - не тратьте время на изучение других утверждений. Утверждать, что это единственное утверждение, которое вам когда-либо понадобится. (Но это занимает немного чтения, чтобы узнать об этом)

Тогда:

@Test(expected=HeapEmptyException.class) 
public void testGetOnEmptyHeap() { 
    new FibonacciHeap<String>().pop(); 
} 

Дела здесь: ваша куча имеет метод, чтобы получить значение, я назвал его «поп()». И, очевидно, когда вы выталкиваете что-то из пустого стека, вы должны увидеть исключение.

Это несколько примеров того, как вы пишете модульные тесты. Вы делаете один вещь в вашем тесте; и вы проверяете одно; либо используя утверждения, либо ожидая исключений.

+0

Я имел в виду https://developer.salesforce.com/page/How_to_Write_Good_Unit_Tests. Я смущен, если мой модульный тест должен сделать только одно, или проверить все случаи одного метода. Буду признателен за разъяснение – dpm

+1

Один метод ** ** должен проверять одну конкретную функциональность. «Функциональные возможности»: «Поп что-то из пустой кучи». добавьте одну вещь и убедитесь, что поп возвращает то, что вы вложили. И так далее. Итак, да, иногда ваш метод тестирования вызывает несколько ваших методов производства. Поэтому идея состоит в том, что между вашими методами тестирования существует ** минимальное ** совпадение. Хотя на практике это не всегда возможно. – GhostCat

Смежные вопросы