Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Кто как оформляет юнит тесты (https://javascript.ru/forum/misc/32919-kto-kak-oformlyaet-yunit-testy.html)

kobezzza 04.11.2012 12:08

Кто как оформляет юнит тесты
 
При разработке большого объёма кода использование юнит тестов является чуть ли не обязательным условием относительной стабильности релизов, но чем больше пишется тестов, тем сложнее их поддерживать и ориентироваться. В попытке решения этой проблемы я стал разбивать тесты на тематические группы по файлам (https://github.com/kobezzza/Collecti...e/master/tests как пример), но такой подход всё равно мне не очень нравится, т.к. из одной большой помойки мы делаем много маленьких, но главным образом не нравится то, что получается, что тест как то оторван от тестируемого кода и из-за этого, когда я обнаруживаю новую багу, которая не покрыта тестом, я частенько ленюсь писать для неё новый тест, т.к. нужно открыть нужный файл (или создать новый!), откладываю на потом и когда приходит день X начинаю писать кучу тестов, при этом частенько забывая некоторые тесты.
Я одно время пытался писать тесты в блоке JSDoc, но такой подход мне ещё больше не понравится, т.к. и без того большие куски комментов становятся просто огромными. Получается замкнутый круг: в файле писать не удобно и вне файла писать не удобно. Есть идея написать плагин для своей ИДЕ, которая будет сканировать JSDoc, находить ссылку на файл тестов и открывать окошко редактирования по клику на ссылку, кажется что так будет удобно.

Может кто может поделится более удобными паттернами юнит тестирования?

melky 04.11.2012 14:30

а что, если сделать один index.html для всех тестов, а сами тесты будут типа такого ?

sort.js
export({

    title: "Sort testing",

    beforeStart: function () { /* чот-то делается перед тестом - напр. создаются коллекции */ },

    body: function () { /* тело теста */ },

    check: function () { /* проверка прохождения теста */ },

    afterEnd: function () { /* что делаем дальше */ }

});

kobezzza 04.11.2012 14:49

Цитата:

Сообщение от melky (Сообщение 214038)
а что, если сделать один index.html для всех тестов, а сами тесты будут типа такого ?

sort.js
export({

    title: "Sort testing",

    beforeStart: function () { /* чот-то делается перед тестом - напр. создаются коллекции */ },

    body: function () { /* тело теста */ },

    check: function () { /* проверка прохождения теста */ },

    afterEnd: function () { /* что делаем дальше */ }

});

Не, так совсем плохо, файл будет расти по арифметической прогрессии, визуальное восприятие лучше, когда буков мало:) Я для того и разбил их на файлики, чтобы попытаться структурировать, но следует отметить, что разделение на разделы в одном файле я тоже использую, и у QUnit (либы, что я юзаю) для этого есть АПИ.

У меня в голове крутится идея, о плагине для ИДЕ, по аналогии с ZenCoding, мол пишеш @addTest в JSDoc, жмёшь хот кей, и в папке где лежит файл с кодом создаётся новый файл с названием как у тестируемой функции или метода, @addTest заменяется на src файла и при двойном клике по нему открывается новая вкладка ИДЕ с редактированием теста. Как идея?

melky 04.11.2012 15:03

Цитата:

Сообщение от kobezzza
файл будет расти по арифметической прогрессии

почему? это пример одного теста - на сортировку.

Цитата:

Сообщение от kobezzza
Как идея

удобно, но было бы лучше смержить этот способ с моим :)

kobezzza 04.11.2012 15:09

Цитата:

Сообщение от melky (Сообщение 214045)
почему? это пример одного теста - на сортировку

Один метод может спокойно иметь от 1 до 100 и более тестов, а общее количество тестов на проект может быть спокойно больше 10-ти тысяч. Если все тесты буду лежать в одном файлике, то редактирование вручную этого файла может стать проблемой. На работе у нас уже обычная ситуация, что делаешь коммит и нечаянно роняешь 200-300 тестов:)

tenshi 04.11.2012 19:01

у меня для каждого модуля есть страница с документацией, тестами и бенчмарками. примерно такого вида: http://nin-jin.github.com/article/ar...le_dev.doc.xml

kobezzza 26.11.2012 00:31

Написал плагинчик к своей ИДЕ, как и хотел, стало очень удобно.
Вот пример видео: http://screencast.com/t/bQ5El34Jmex.

Тут выложил свои плагинчики для Adobe DW (тестил тока на винде на CS6), а также улучшенный автокомплит по методам из JS 1.8.5
https://github.com/kobezzza/DWPlugins


Часовой пояс GMT +3, время: 05:42.