2013-02-23 4 views
8

Я пытаюсь использовать cabal-install как способ построения и, что более важно, проверять мои проекты haskell, немного похоже на то, как Maven используется в Java-проектах, главным образом потому, что кажется, что быть хорошим способом, а также интегрироваться в Jenkins или ci или так, и он кажется очень надежным в некотором смысле, что вам не нужна среда разработки и т. д., настроенная для проверки и подтверждения того, компилируется и исправляется код или нет.Haskell Cabal QuickCheck Integration

В любом случае, я использую QuickCheck и HUnit для этого. В другом сообщении here об обмене стеками я нашел хороший способ интегрировать HUnit и cabal с помощью функционального теста в Distribution.TestSuite.HUnit для создания массива открытых тестов в моем тестовом модуле. Работает.

Я попытался сделать то же стиль создан с QuickCheck,

import qualified Distribution.TestSuite.QuickCheck2 as CabalQuickCheck 

    alwaysFalseOneArg::Int->(Int,Int) 
    alwaysFalseOneArg x = (x,x) 

    quickCheckPropOneArg = \s->let (a,b)=alwaysFalseOneArg s in a==b && a/=b 

    cabalQCTest = CabalQuickCheck.test "test" quickCheckPropOneArg 

    tests=cabalQCTest:[] 

Я хочу, чтобы этот тест не в состоянии.

В файле cabal у меня есть работы с настройкой HUnit, при этом тесты HUnit работают и не работают или не работают должным образом. Если я использую одну и ту же настройку для выполнения тестов quickcheck, каббаль говорит мне, что он действительно нашел набор тестов, но в нем нет тестов. Я пробовал подход, который упоминается в файле site Distribution.TestSuite.QuickCheck2, но там они, похоже, не упоминают, как выставить тест, и мне, похоже, не удается выполнить этот прогон. Сейчас я немного в затруднении, я могу запустить эти тесты quickcheck с помощью самого quickcheck, но не с помощью cabal, и я хотел бы иметь это, чтобы иметь возможность быстро проверить все мои тесты и код и использовать его в Jenkins или так. У кого-нибудь есть идея?

Я попытался предоставить всю информацию, которая, по моему мнению, необходима без излишнего усложнения материала, поэтому я не опубликовал полный файл-кабалу и т. Д., Если это было необходимо, я, конечно, сделаю это. Я нашел немало похожих сообщений, но большинство из них сводится к использованию чего-то еще, чем подробного 0,9, что было бы жалко, поскольку, похоже, он очень хорошо работает с HUnit в качестве настройки, и я хотел бы использовать как HUnit, так и QuickCheck таким же образом, предпочтительно отображать один массив тестов, содержащий тесты HUnit и QuickCheck.

Kasper

+0

Вот возможный пример: https://github.com/patperry/hs-monte-carlo/blob/master/monte-carlo.cabal и тест с главным вызывающим QC: https: // GitHub .com/patperry/hs-monte-carlo/blob/master/tests/Main.hs – gliptak

+1

Следуя за комментарием gliptak, я исследовал бы с помощью test-framework; Мне это кажется более удобным. [Дополнительный] (https://github.com/isturdy/q/blob/master/tests/Tests.hs) [пример] (https://github.com/isturdy/q/blob/master/tests/Data /Queue/RealtimeTests.hs). – isturdy

ответ

2

Я согласен с isturdy: Я бы определенно пойти на test-framework + test-framework-quickcheck2. Обратитесь к this example о том, как использовать их вместе в проекте. Обратите внимание на свойства, называемые prop_*.

Вы также можете проверить проект haskell-minecraft-tool, чтобы посмотреть, как выглядит тестовый результат. Запустите тесты с

cabal configure --enable-tests && cabal build && cabal test 

Посмотрите на файл .cabal здесь, чтобы посмотреть, что требуются пакеты. А именно: test-framework, test-framework-quickcheck2, QuickCheck.