↓
 ↑
Регистрация
Имя/email

Пароль

 
Войти при помощи
Ластро
22 октября 2015
Aa Aa
#Айтишное

Айтишники, вопрос, на каком этапе работы с кодом вы выполняете тестирование (если выполняете)? Чем пользуетесь?

Я вставляю тесты прямо в код, исполняются во время компиляции, если неудачно, то прерывают компиляцию выдавая сообщение о ошибке.
22 октября 2015
13 комментариев из 22
Ластро
Я очень долго тестил из интерпретатора, подавал на вход функций значения и смотрел выходы. Потом мне это надоело, и родилась малюсенькая функция.

Вот такая.

unitTest :: IO () -> Q [Dec]
unitTest b = runIO b >> pure []

Она принимает на вход действие и выполняет его В МОМЕНТ КОМПИЛЯЦИИ, ну и по желанию, в случае нахождения ошибки либо просто пишешь в консоль/файл/etc (putStrLn/hPutStrLn), либо если что серьёзное просто останавливаешь компиляцию (error).

Для использования смотри Template Haskell
Ластро
unitTest = do { when (testF1 3) $ error "1"; when (testF2 "string") $ error "2"}
Ластро
Но если душа желает, можно использовать менее самопальный вариант из какой либо библиотечки отсюда, мне честно говоря было банально лень. Тем более что велосипед весьма миниатюрен ;)
Ластро
По поводу дебага, основной метод которого я придерживаюсь: сделать типизацию максимально жёсткой. Мой девиз:"Ошибки должен искать компилятор".
StragaSevera Онлайн
> Айтишники, вопрос, на каком этапе работы с кодом вы выполняете тестирование (если выполняете)? Чем пользуетесь?
Test Driven Development for the win.
Тестирую код до написания кода.
Ластро
Но ненаписанный код заведомо не пройдёт тестирование! Или я чего-то не понимаю?
Ластро
А всё, до меня дошло как народ умудряется писать без строгой типизации... извращение однако.
StragaSevera Онлайн
Al Lastor
Принцип Red-Green-Refactor.
Напиши тест, который проваливается. Напиши код так, чтобы тест перестал проваливаться. Отрефактори код, чтобы он стал красивым.
Ластро
Блин, мне это что-то напоминает.
Напиши типы на входе и на выходе которым должна удовлетворять функция, если порядок аргументов значим, перепиши тип так, чтобы его нарушение стало невозможным. Напиши функцию удовлетворяющую этому типу. Произведи обобщение предыдущего кода с учётом нового.
извращенец
Ластро
Нисколько. Обычно к написанию типов(для функций), я приступаю тогда, когда не могу собрать функцию. В остальных случаях есть команда i в интерпретаторе(пусть компьютер пашет за меня и выведет типы сам). Первый этап зачастую выпадает. А типизацию более жесткой/надёжной можно сделать и после.
Ластро
Mikie, на каком этапе проблемы, скомпилировать код или заставить работать скомпилированный?
Ластро
Mikie если лень отлаживать попробуй усилить типизацию.
Про типизацию
Если нет, http://eax.me/haskell-debug-trace/
ПОИСК
ФАНФИКОВ











Закрыть
Закрыть
Закрыть