Чудесата не се случват, или греша макет срещу мъниче

По-долу, ние се опитваме да се спекулира какво приликите и разликите между, как и защо те се използват.

Проверка на ефективността на изпитвания обект (система uder тест - SUT) по два начина: оценка на състоянието на обекта или неговото поведение.

В първия случай, проверка на правилното функциониране на метод SUT е да се направи оценка на състоянието на SUT, както и взаимодействащи си обекти, а след това се обадите на този метод.

На второ място, ние тестваме комплект и процедура (методи за обаждания от взаимодействащи си обекти, други методи SUT), което трябва да направи метода на SUT.

Всъщност, ако една дума, в един случай, все още мъниче. а другата се подиграват. Това са обекти, които са създадени и използвани за замяна на реални обекти, с които SUT в хода на тяхната работа.

Джерард Месарош използва термина Тест двойни (удвояването) като означение за обекта, който замества недвижими обекта, на която SUT, за тестови цели.

Когато се наложи да използвате двойно?

  • тестове на изчерпване на скоростта с реални обекти (ако, например, работа с база, файлове, пощенски сървър и т.н.)
  • Всъщност необходимостта от изпълнете тестовете, независимо от околната среда (например, на една машина по всяко разработчик)
  • Системата, в която работят кода не позволява (или дава, но е трудно да се направи), за да изпълни код с определен набор въвеждане на данни.
  • Няма начин да се провери дали SUT е работил добре, например, той не променя състоянието си, както и състоянието на външната система. И там е този тест направи, е трудно.

Джерард определя следните видове стойка-ин:

- са обекти, които са преминали към методи, но всъщност не се използват. По принцип, този метод параметри (освен ако, разбира се, те не влияят на теста, че искаме да се провери). Понякога това е просто NULL

- обекти, които имат вътрешно изпълнение, но това обикновено е силно подрязани и не могат да бъдат използвани в окончателния код.

- осигури твърдо кодирани отговаряне на повиквания по време на тестове. Използва се за заместване на тези съоръжения, които осигуряват SUT входни данни. Те могат също така да запази информацията за повикване (например параметри или броя на обажданията) - понякога се наричат ​​мандата си тест Spy. Това "запис" ви позволява да се направи оценка на изпълнението на SUT, ако състоянието на SUT не се променя.

- обекти, които са определени (например специфични за всеки тест) и позволяват да се определи очаквания като един вид спецификация повикване, които планираме да получите

Mock'i ​​работи само на проверка на поведението на всички тези двойки. Останалата част обикновено се използва за проверка на състоянието. По време на изпълнение на използването на метода SUT удвоява по-различно. Но Mock'i ​​изисква настройки, преди да пуснете и ще позволи да се направи оценка на процеса на изпълнение.

В класическия вариант на модулни тестови реални обекти, където е възможно (освен както е описано по-горе). В Mokyr (mockist) изпълнение - всички Mokyr освен обект, който тест (SUT)

Каква е ползата? Има плюсове и минуси и за двете.

Нека разгледаме недостатъците.

С помощта на класическия подход с помощта на реални обекти, в случай на грешка в един от методите, "червените" ще бъде всички тестове, в които се използва този метод (независимо от това дали тя е тествана в тях или просто да се използват от друг обект). въпроси локализация може да бъде трудна задача, ако теста за писане, не си мисля за детайлността на теста: минималната изисквана вътрешно.

Когато mokirovanii всичко и всичко може да бъде и друг проблем: поведенчески тестове строго фиксират вътрешния изпълнението на SUT. Какво и как се нарича с какви аргументи, това, което се използва API и т.н. Всичко това го прави трудно да Преструктуриране на, и е възможно промени в SUT - заедно с всички необходими тестове, за да напишете кода от нулата.

Кое е по-лесно, по който сте избрали. От моя опит мога да кажа, че аз предпочитам класиката и по-разбираема (доволен, че Мартин Фаулър на същото мнение). Но с mokirovaniem, тъй като не се отглежда заедно.

И моля, не го правят Mokyr нищо в тестове за приемане - всичко трябва да е жив, в противен случай тестовете ще бъдете измамени. Многократно е убеден в това от личен опит.