1 | |
Как правильно отделить пакет библиотеки от тестов?10.04.2014, 12:28. Показов 1442. Ответов 15
Метки нет Все метки)
(
Поделитесь, пожалуйста, опытом: кто как организует проект с тестами?
Пока пишу тесты прямо в коде и запускаю их из main. Но скоро собирать все в пакет, и не хочется тянуть Tasty в зависимости. Кто как поступает? Использую Tasty.HUnit. Спасибо.
0
|
|
10.04.2014, 12:28 | |
Ответы с готовыми решениями:
15
Как правильно отделить логику от вида Инкапсуляция или как правильно отделить логику Как правильно присоединить пакет java.lang? (компиляция без инструкции import) Программа для тестов - как грамотно подойти к редактированию тестов |
10.04.2014, 12:58 [ТС] | 3 |
Пути до модулей у него не интуитивные.
Использую Sublime Text 2. В нем на F9 забиндил runhaskell с текущим файлом. Удобно: написал, нажал F9 - проверилось. Начал оформлять в пакет, появилось два варианта: 1. кабал собирает пакет, но при этом в SublimeText runhaskell по F9 выдает, что не может import Hs2GCode.Common 2. могу переименовать пакет на Common. F9 работает, но теперь кабал не может собрать пакет. С тестами еще не разобрался. runhaskell Setup test -ломится искать test.exe. Но это дело техники. Вообщем, хочу, чтобы можно было каждый файлик править, нажать F9, проверить. А потом выйти и пнуть кабал, чтобы он собрал пакет. Не получается.
1
|
![]() 5827 / 3478 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
|
||||||||||||||||
10.04.2014, 14:19 | 4 | |||||||||||||||
![]() Решение
Cabal to rescue!
Рассмотрим простой пример: библиотека, предоставляющая тип «множество». src/Data/MySet.hs содержит определение самого типа и операций над ним. Кликните здесь для просмотра всего текста
Содержимое myset.cabal. Кликните здесь для просмотра всего текста
Код
name: myset version: 0.1.0.0 -- synopsis: -- description: license: MIT license-file: LICENSE author: nameless maintainer: nameless@no.such.domain.org -- copyright: category: Data build-type: Simple cabal-version: >=1.8 library exposed-modules: Data.MySet -- other-modules: build-depends: base ==4.5.* hs-source-dirs: src ghc-options: -Wall -Werror Теперь мы хотим добавить тесты, для этого в .cabal-файл нужно добавить секцию test-suite: Код
test-suite tests main-is: TestSuite.hs hs-source-dirs: src test type: exitcode-stdio-1.0 build-depends: base ==4.5.*, test-framework ==0.8.*, test-framework-hunit ==0.3.*, HUnit ==1.2.* Теперь по организации тестов: я для каждого модуля This.Is.Module.Name (который располагается в директории src), который собираюсь тестировать, создаю модуль с названием This.Is.Module.Name.Tests в директории test с определениями тестов. test/Data/MySet/Tests.hs. Кликните здесь для просмотра всего текста
И, наконец, код test/TestSuite.hs. Кликните здесь для просмотра всего текста
Структура директорий проекта:
0
|
10.04.2014, 15:37 [ТС] | 5 |
Теперь добавим в эту библиотеку еще один тип и сделаем import Data.MySet, назовем его Data.MyFunc.
Библиотека соберется. Но если ты захочешь покопаться отдельно в Data.MyFunc (запустить его отдельно через runhaskell), то он не сможет найти Data.MySet. Вот и получается, что либо постоянно выскакивай из редактора и запускай тесты после каждого чиха, либо пиши все в одном файле. Вместе с тестами.
0
|
![]() 5827 / 3478 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
|
|
10.04.2014, 15:40 | 6 |
0
|
10.04.2014, 15:50 [ТС] | 7 | |||||
Вот такой код соберется в пакет:
У меня, по крайней мере так.
0
|
![]() 5827 / 3478 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
|
|
10.04.2014, 15:56 | 8 |
Напрямую ghci не использую, а использую Emacs, и у меня всё прекрасно работает.
0
|
![]() 5827 / 3478 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
|
|
10.04.2014, 16:00 | 9 |
На скриншоте видно, как в интерпретаторе загружен модуль Data.MySet.Tests и выводится информация о типе tests не смотря на то, что Data.MySet.Tests импортирует модуль Data.MySet, который вообще находится в другой директории.
0
|
10.04.2014, 16:02 [ТС] | 10 |
Ну я для примера. Можно заменить на runhaskell.
У меня Sublime Text. В нем на кнопку F9 записан runhaskell с редактируемым файлом в качестве параметра. Не работает. Можно посмотреть строку запуска для Emacsa?
0
|
![]() 5827 / 3478 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
|
||||||
10.04.2014, 16:06 | 11 | |||||
Строки запуска нет. Я нажимаю комбинацию Ctrl-L, при этом вызывается функция haskell-process-load-file.
Вот на всякий случай моя конфигурация haskell-mode:
0
|
![]() 5827 / 3478 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
|
|
10.04.2014, 16:13 | 13 |
А без разницы. Вот тебе скриншот с двумя файлами Foo.hs и Main.hs, созданными во временной директории (т. е. это вообще не Cabal-проект и установить я их никак не мог)
Слева сверху — Foo.hs Слева снизу — Main.hs Загружаю в интерпретатор (справа) Main.hs, запускаю функцию main. Всё работает.
0
|
10.04.2014, 16:14 [ТС] | 14 |
Сейчас заинталлил библиотеку, все получилось.
Внес изменения, чтобы тесты поломались. Пришлось опять делать build и install, чтобы тесты "оживились". Возможно надо копать в сторону настроек редактора.
0
|
![]() 5827 / 3478 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
|
|
10.04.2014, 16:25 | 16 |
aaleksander, ну тебя же никто не заставляет использовать Sublime Text.
Понятное дело, что поддержка Haskell в Emacs далеко превосходит простой вызов runhaskell, но это по сути единственный на наше время редактор/IDE с поддержкой Haskell, так что особого выбора нет. Правда, есть ещё Leksah, но оно, во-первых, жутко глючное, во-вторых, мёртвое.
0
|
10.04.2014, 16:25 | |
Помогаю со студенческими работами здесь
16
Правильно отделить методы Как определить, какой из подсетей принадлежит пакет IP-пакет? Как правильно подключать файлы и библиотеки. Как правильно устанавливать библиотеки из tar.gz Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |