View on GitHub

wiki

Technical Excellence Wiki

Xunit

Перевод статьи на русский язык Мартина Фаулера Xunit

XUnit - это название данное семейству тестовых фреймворков, которые стали широко известными среди разработчиков программного обеспечения. Название произошло от JUnit - первого из тех, что получили широкую известность.

На самом деле происхождение фреймворков началось со Smalltalk. Кент Бэк был большим поклонником автоматического тестирования как основы для разработки. Для того, чтобы помочь ему и его клиентам так работать он создал простой фреймворк для организации и запуска тестов. Фокус был на создании инструмента, чтобы разработчикам было проще писать тесты, используя их обычное окружение и затем быстро запускать выборочно или все тесты сразу. Кент и его последователи запускали unit-тесты сразу после каждого изменения в системе проходя через быструю правку и тестовый цикл в IDE smalltalk.

Я познакомился с Кентом в это время. Я уже аналогичную же вещь сам, но у фреймворка Кента была приятная комбинация абсурдной простоты и те фичи, которые мне были нужны. Он просто сделал работу лучше, чем я, мне лишь нужно просто воспользоваться его трудами. В частности, мы использовали этот фреймворк в C3, где с ним познакомился также и Рон Джеффрис.

Я говорю “ним”, но в действительности это неправильное слово. Не было никакого единого тестового-фреймворка-кента-бэка. Кент хотел чтобы люди сами могли контролировать собственное окружение для разработки (на настройку уходило всего пару часов), таким способом, чтобы они могли счастливо исправлять его для своих нужд. По существу это был многократно используемых базовых классов и интерфейсов (SEEDwork).

Он пока ещё не был известен за пределами сообщества Smalltalk, поэтому было честно дать JUnit возможность распространить идею шире. JUnit был рождён в полёте на конференцию OOPSLA из Цюриха в Атланту в 1997 году. Кент летел вместе с Эрихом Гаммой и чем ещё могли заняться два гика во время длинного перелета? конечно программировать! Первая версия JUnit была рождена именно так, в парном программировании, через test-first (приятная форма meta-circular geekery). Я слышал об этом и потребовал копию, тем самым я стал первым альфа-пользователем. Я мог спокойно менять вещи, которые мне не нравились, отправляя некоторые правки Кенту и Эрику. Это если вы интересуетесь кого винить за то, что сообщение в проверке(assert) стали первым аргументом, вопреки принятому в java соглашении, что опциональные аргументы нужно помещать в конец….

В JUnit также появилась красно/зеленая панель для отображения прогресса. В C3 мы как-то попробовали раскрасить все окно в красный цвет при падении тестов и в зеленый если они проходили. Было легко увидеть окно на главной сборочной машине во время интеграции. JUnit ввел это в виде полосы прогресса и тем самым добавил новые слова в сленг разработчиков.

JUnit взлетел как ракета — это было хорошей поддержкой для растущего движения Экстремального Программирования и TDD. Я видел серьёзное изменение в поведении разработчиков по отношению к тестированию за последние 10 лет, и я думаю JUnit сыграл большую роль в этом. Будучи маленьким и простым он подстрекал людей изучать и использовать его. Он также легко поддавался расширению и интеграции в другие инструменты. (Хотя, я бы хотел чтобы Sun просто добавили его в JDK.)

С ростом популярности JUnit другие языки подобный инструмент. Я помню как Майкл Физерс написал CppUnit для С++, который возможно был первым портом. После этого было масса последователей, почти для каждого языка есть как минимум один порт JUnit. Я думаю было неизбежно, что в итоге он вернулся в Smalltalk как полноценный фреймворк.

Порты отличались. Одни были переработкой оригинального JUnit с небольшими изменениями под особенности языка. В первой версии NUnit был даже метод “isVAforJava”, который в оригинале делал специальную обработку Visual Age для Java. Другие были значительно более сложные: NUnit 2.0, - который так хвалил Андерс Хейлсберг за своё использование атрибутов C# - опыт, который вернулся в сообщество Java и в сам JUnit и так в Java появились аннотации.

Перевел: Сергей Лобин.

Остались вопросы? Задавай в нашем чате.