Как проверить метод void с помощью инструментов тестирования Junit? - PullRequest
28 голосов
/ 07 августа 2009

Мне просто удалось реализовать метод void followlink(obj page,obj link), который просто добавляет страницу и ссылку в очередь. Я безуспешно пытался проверить этот метод.

Все, что я хочу - это проверить, что в очереди есть страница и ссылка, полученные методом followlink. Мой тестовый класс уже расширяет TestCase. Итак, каков наилучший способ проверить такой метод?

Ответы [ 6 ]

42 голосов
/ 07 августа 2009

FAQ JUnit содержит раздел о методах тестирования, которые возвращают void. В вашем случае вы хотите проверить побочный эффект вызванного метода.

Пример, приведенный в FAQ, проверяет, что размер Collection изменяется после добавления элемента.

@Test
public void testCollectionAdd() {
    Collection collection = new ArrayList();
    assertEquals(0, collection.size());
    collection.add("itemA");
    assertEquals(1, collection.size());
    collection.add("itemB");
    assertEquals(2, collection.size());
}
15 голосов
/ 07 августа 2009

Вы можете проверить размер, если очередь до и после вызова вашего метода, что-то вроде:

int size = queue.length();
followLink(page, link);
assertEquals(size+1, queue.length()); // or maybe size+2?

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

3 голосов
/ 07 августа 2009

Скорее всего, ваша очередь приватная , поэтому проверка размера не сработает. Решение «Дизайн для тестирования», которое я видел, состоит в том, чтобы вместо этого использовать пакет приватных методов и членов. Поскольку ваши тесты junit, скорее всего, будут в одном пакете, у них будет доступ.

Это само по себе позволяет тесту на побочный эффект " queue.length () ".

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

Решение jMock также очень хорошо, хотя на самом деле я гораздо лучше знаком с написанием собственных тестовых наборов.

0 голосов
/ 15 июня 2016

У нас есть два способа проверить следующее:

  1. Проверьте, используя размер очереди / коллекции, как в программе ниже: (Как указывает Патрик)

    @Test
    public void testfollowlinkAdd() {
      int size = queue.length();
      queue.add(pageLink);   //Considering an Object of PageLink
      Assert.assertTrue(size+1, queue.length());
    }
    

OR

  1. Используйте MockObjects. Здесь могут помочь такие фреймворки, как Mockito.
0 голосов
/ 07 августа 2009

Используя библиотеку jMock и макетируйте хранилище , в котором хранится ваша очередь, jMock позволяет определить, был ли вызван смоделированный метод и с какими параметрами.

0 голосов
/ 07 августа 2009

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

...