На мой взгляд, у вас обоих есть преимущество, и вы находитесь в «невыгодном положении» (так).
Преимущество состоит в том, что у вас есть система, которая вам удобна и работает для вас. Вы рады, что он подтверждает действительность вашего продукта, и вы, вероятно, не найдете никакой коммерческой ценности, пытаясь изменить все свои тесты на что-то, использующее другую среду. Если вы можете провести рефакторинг своего кода, и ваши тесты воспримут изменения - или, что еще лучше, если вы сможете изменить свои тесты, и ваш существующий код не пройдет тесты, пока он не будет подвергнут рефакторингу, тогда у вас есть все ваши базы. Тем не мение...
Одним из преимуществ хорошо спроектированного API модульного тестирования является то, что в большинстве современных IDE имеется много встроенной поддержки. Это не повлияет на пользователей ядра VI и emacs, которые насмехаются над пользователями Visual Studio, но для тех, кто использует хорошую IDE, у вас есть возможность отлаживать свои тесты и выполнять их внутри сама IDE. Это хорошо, однако есть еще большее преимущество в зависимости от используемой платформы, и это на языке, используемом для тестирования вашего кода.
Когда я говорю « язык» , я не говорю о языке программирования, но вместо этого я говорю о богатом наборе слов, заключенном в свободный синтаксис, который делает тестовый код читаемым как история. В частности, я стал сторонником использования структур BDD . Мой личный любимый API DotNet BDD - 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!
Использование свободного API BDD:
(представьте, что выделенные курсивом биты являются в основном указателями метода)
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 предлагает вам четкий описание того, что вы тестируете, и как была определена ваша тестовая конфигурация, и вы можете показать этот код непрограммисту, и он сразу же поймет, что происходит. Кроме того, если «variable_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 модульного тестирования,