Які основні фактори при виборі глузуючої рамки?


15

Я хочу розпочати роботу з об'єктами в моїх тестових одиницях. Здається, там є багато хороших глузуючих рамок.

  1. Чи мають різні рамки різні цільові аудиторії?
  2. Які чинники слід враховувати, вибираючи, яка рамка підходить для моєї ситуації?

Я працюю в.
epotter

Відповіді:


14

Чи мають різні рамки різні цільові аудиторії?

Так. Деякі структури , такі як Microsoft родимки , TypeMock ізолятор і JustMock , дозволяють бути в змозі сміятися над чим завгодно. Ці глузуючі інструменти, як правило, кращі для розробників, які бажають використовувати їх у існуючому застарілому коді, оскільки може бути неможливо переробити такий дизайн у більш тестовий дизайн. *

Традиційно, тестовані конструкції означають , що кодовий потрібно зробити ліберальне використання інтерфейсів, абстрактних класів, віртуальних методи, незакритих класів і т.д. Таким чином, традиційні рамки глузливо , як MOq і RhinoMocks добре працювати з кодом розроблені з використанням Test Driven Development, Dependency Injection, і інші подібні поняття. До речі, я б дуже рекомендував використовувати Dependency Injection, оскільки ви отримуєте набагато більше, ніж просто перевіряемый код, але і більш рентабельний код.

Які чинники слід враховувати, вибираючи, яка рамка підходить для моєї ситуації?

  • Розвиток діяльності. Такі інструменти, як Moq і RhinoMocks, дуже активні і популярні, тому вони є сучасними.
  • Open Source Vs. Комерційний . Розглянемо різні плюси і мінуси, характерні для цього порівняння. Вартість, підтримка тощо ...
  • Зрілість. Як новий інструмент. Він знаходиться в бета-версії (як Microsoft Moles) чи має кілька стабільних версій? Наприклад, мені подобається Moles за застарілим кодом, але є кілька помилок, які потрібно вирішити в ньому, і їх потрібно буде чекати, перш ніж їх адресуватимуть (наступний випуск листопада 2011).
  • Документація. Існує декілька книг і блогів, які висвітлюють тестування блоків, глузування, автоматичний глузування тощо. Крім того, наскільки хороша документація щодо інструменту?
  • Синтаксис . Кожен інструмент має свій власний спосіб сказати те саме. Подивіться, який з них вам краще підходить.
  • Швидкість . Інструменти, які використовують CLR-профілювання (TypeMock, Moles, JustMock), можуть бути набагато повільнішими, ніж традиційні (Moq, RhinoMocks). Ця швидкість покарання може бути проблемою, оскільки ви збираєте багато тестів. Основне правило - якщо тест триває більше 1/10 секунди, це занадто повільно.
  • Підтримка громади . Чи пишуть інші розробники інші інструменти, які поширюються (або працюють у комплімент) на інструмент глузування? Існує проект Moq.Contrib, який додає Moq для автоматичного глузування (що допомагає пришвидшити час написання тесту). А ще краще, є AutoFixture , AutoFixture.AutoMoq, AutoFixture.AutoRhinoMocks, який також дозволяє робити автоматичний глузування, а також створення анонімних змінних.

* Див. « Ефективна робота зі застарілим кодом» щодо способів того, як повільно перетворювати код без тестів у код, який можна використовувати з традиційними інструментами тестування (та знущаннями).


2

Навчальний посібник Moq в самому початку має розділ про тло, філософію та суперечки, в якому обговорюється це стосовно декількох конкретних інструментів: IsoMolator TypeMock, RhinoMocks та Moq. Це написано для пояснення Moq, тому, природно, трохи перекошений, але я вважав, що це мені дуже корисно, намагаючись зрозуміти деякі відмінності в глузливих рамках.

Я знайшов відповіді на цю тему SO в С # Mocking Frameworks також корисними. Більшість просто посилаються на один Mocking Framework, який користувач дійсно вважає корисним, але є відповідь від HaraldV щодо способів, які обговорюють макети на основі проксі та макети на основі профілів.

Я також зміг знайти діаграму порівняння в Інтернеті. Зауважте, що це з 2009 року, тому я не впевнений, що він актуальний; є хоча б один коментар, в якому зазначається, що інформація про TypeMock та зворотні виклики застаріла, але діаграма може бути корисною для розгляду питань, навіть якщо вам знадобиться зробити обробку, щоб побачити, що таке стан: RhinoMocks, Moq, NMock, та діаграму порівняння TypeMock

В Google Code є проект з тестовими кейсами в декількох фреймворках для легкого порівняння коду: mocking-frameworks-порівняння


2
  1. Простота використання. Деякі рамки мають більш вдосконалені ідіоми використання. Наприклад, MOQ дозволяє використовувати лямбдаси для кодування очікувань. Деякі старі бібліотеки цього не підтримують.
  2. Швидкість. Кожен тест одиниці повинен бути швидким, щоб уся ваша бібліотека не займала години. Деякі знущаючі рамки мають статично генеровані макети, що швидко. Інші рамки динамічно генерують код під час виконання, який проходить повільніше.
  3. Підтримка. Ви хочете структуру, яка активно підтримується виправленнями та оновлюється для підтримки нових версій .NET, як вони випускаються.
  4. Потужність. Більшість глузливих рамок, які я досліджував, приблизно однакові за потужністю. Є один помітний виняток. Microsoft Moles дозволяє глузувати з "невіртуальних / статичних методів у герметичних типах". Наскільки мені відомо, це не підтримує жоден інший глузливий фреймворк.

У моїй команді ми вибрали Microsoft Moles . Він виграє суттєво на №2, №3 та №4, хоча є менш ідіоматичним, ніж більшість альтернативних варіантів, і знаходиться в нижньому кінці №1.


Зараз багато рамок, таких як TypeMock, JustMock, дозволяє глузувати з статичних методів, закритих класів тощо
muruge
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.