Як я це бачу, ви обидва маєте перевагу, і ви перебуваєте у "невигідності" (sic).
Перевага полягає в тому, що у вас є система, з якою ви відчуваєте себе комфортно і яка працює для вас. Ви щасливі, що це підтверджує валідність вашого продукту, і ви, ймовірно, не знайдете корисної для бізнесу спроби змінити всі ваші тести на те, що використовує іншу основу. Якщо ви можете перефактурувати свій код, а ваші тести підберуть зміни - а ще краще, якщо ви можете змінити свої тести, і ваш існуючий код не зможе тести, поки він не буде відновлений, тоді ви маєте всі ваші бази. Однак ...
Однією з переваг добре розробленого API тестування модулів є те, що в більшості сучасних IDE існує велика підтримка. Це не вплине на жорстоких користувачів VI та emacs, які знущаються над користувачами Visual Studio там, але для тих, хто використовує хороший IDE, ви маєте можливість налагоджувати свої тести та виконувати їх у межах сама IDE. Це добре, однак є ще більша перевага залежно від використовуваної рамки, яка є в мові використовується для тестування вашого коду.
Коли я розмовляю мовою , я не говорю про мову програмування, а натомість я кажу про багатий набір слів, загорнутий у вільний синтаксис, який робить тестовий код прочитаним як історію. Зокрема, я став прихильником використання рамок BDD . Мій особистий улюблений DotNet BDD API - це StoryQ, але є кілька інших з тією ж основною метою, яка полягає в тому, щоб вийняти концепцію з документа про вимоги і записати її в код аналогічно тому, як це написано в специфікації. Однак дійсно хороші API-файли йдуть ще далі, перехоплюючи кожне окреме висловлювання в рамках тесту та вказуючи, успішно виконано, чи не вдалося. Це неймовірно корисно, оскільки ви бачите весь тест, виконаний без повернення рано, а це означає, що ваші зусилля налагодження стають неймовірно ефективними, оскільки вам потрібно лише зосередити свою увагу на частинах тесту, які не вдалися, не потребуючи розшифровувати весь виклик послідовність. Інша приємна річ - тест-результат показує вам всю цю інформацію,
Як приклад того, про що я говорю, порівняйте наступне:
Використання тверджень:
Assert(variable_A == expected_value_1); // if this fails...
Assert(variable_B == expected_value_2); // ...this will not execute
Assert(variable_C == expected_value_3); // ...and nor will this!
Використання вільного BDD API:
(Уявіть, що курсивні біти - це в основному покажчики методу)
WithScenario("Test Scenario")
.Given(*AConfiguration*) // each method
.When(*MyMethodToTestIsCalledWith*, variable_A, variable_B, variable_C) // in the
.Then(*ExpectVariableAEquals*, expected_value_1) // Scenario will
.And(*ExpectVariableBEquals*, expected_value_2) // indicate if it has
.And(*ExpectVariableCEquals*, expected_value_3) // passed or failed execution.
.Execute();
Тепер наданий синтаксис BDD довший і більш важкий, і ці приклади страшенно надумані, однак для дуже складних ситуацій тестування, коли багато чого змінюється в системі внаслідок заданої поведінки системи, синтаксис BDD пропонує вам зрозумілий опис того, що ви протестуєте, і як була визначена ваша тестова конфігурація, і ви можете показати цей код непрограмісту, і він миттєво зрозуміє, що відбувається. Крім того, якщо "varia__A" провалить тест в обох випадках, приклад Asserts не виконає минуле першого затвердження, поки ви не усунете проблему, тоді як API BDD буде виконувати кожен метод, викликаний у ланцюзі, в свою чергу, і вказувати, який окремі частини твердження були помилковими.
Особисто я вважаю, що цей підхід працює набагато краще, ніж традиційні рамки xUnit, в тому сенсі, що мова тестування є тією ж мовою, що і ваші клієнти будуть говорити про свої логічні вимоги. Незважаючи на це, мені вдалося використовувати рамки xUnit у подібному стилі, не потребуючи винаходити повний API тестування, щоб підтримати мої зусилля, і, хоча твердження все одно будуть ефективно коротко замикатися, вони читають більш чисто. Наприклад:
Використання Nunit :
[Test]
void TestMyMethod()
{
const int theExpectedValue = someValue;
GivenASetupToTestMyMethod();
var theActualValue = WhenIExecuteMyMethodToTest();
Assert.That(theActualValue, Is.EqualTo(theExpectedValue)); // nice, but it's not BDD
}
Якщо ви все-таки вирішите дослідити, використовуючи API тестування модулів, моя порада - експериментувати з великою кількістю різних API протягом певного часу, а також зберігати та відкривати свою думку про свій підхід. Хоча я особисто виступаю за BDD, ваші власні потреби в бізнесі можуть вимагати чогось іншого для обставин вашої команди. Основне, однак, полягає у тому, щоб уникнути другого відгадування вашої існуючої системи. Ви завжди можете підтримувати наявні тести кількома тестами, використовуючи інший API, якщо це потрібно, але я, звичайно, не рекомендував би переписати величезний тест просто для того, щоб все було те саме. Оскільки застарілий код виходить з ужитку, ви можете легко замінити його та його тести на новий код та тести з використанням альтернативного API, і це не потребує великих вкладень у зусилля, які не обов'язково принесуть вам реальну цінність для бізнесу. Що стосується використання API тестування модулів,