2013-08-20 1 views
5

У меня есть удивительное количество трудностей, связанных с проведением модульных испытаний, которые будут выполняться под управлением. Я скопировал тестовый код дословно из the cabal documentation, за исключением изменения имени модуляКак использовать подробный-0.9 в испытаниях в кабине

{-# LANGUAGE FlexibleInstances #-} 
module Test.Integral (tests) where 

import Distribution.TestSuite 

instance TestOptions (String, Bool) where 
    name = fst 
    options = const [] 
    defaultOptions _ = return (Options []) 
    check _ _ = [] 

instance PureTestable (String, Bool) where 
    run (name, result) _ | result == True = Pass 
         | result == False = Fail (name ++ " failed!") 

test :: (String, Bool) -> Test 
test = pure 

-- In actual usage, the instances 'TestOptions (String, Bool)' and 
-- 'PureTestable (String, Bool)', as well as the function 'test', would be 
-- provided by the test framework. 

tests :: [Test] 
tests = 
    [ test ("bar-1", True) 
    , test ("bar-2", False) 
    ] 

Однако, когда я пытаюсь построить тесты, я получаю следующие сообщения:

Test/Integral.hs:6:10: 
    Not in scope: type constructor or class `TestOptions' 

Test/Integral.hs:12:10: 
    Not in scope: type constructor or class `PureTestable' 

I попытался импортировать их непосредственно из Distribution.TestSuite, но он сказал, что они не были экспортированы. Это достаточно просто, что я должен делать что-то глупое, но я не вижу, что это такое.

+0

'TestOptions' и др по всей видимости, со ссылкой на старой старой версии QuickCheck. Я предлагаю вам использовать современную тестовую среду (кажется, что вы смотрите, это всего лишь рамка для запуска набора тестов через cabal, а не создание реального набора - изучите вкусную или тестовую структуру). –

ответ

5

Но для чего это стоит, вот код, который работает:

module Main (tests) where 

import Distribution.TestSuite 

tests :: IO [Test] 
tests = do 
    return [ 
     test "foo" Pass 
    , test "bar" (Fail "It did not work out!") 
    ] 

test :: String -> Result -> Test 
test name r = Test t 
    where   
    t = TestInstance { 
     run = return (Finished r) 
     , name = name 
     , tags = [] 
     , options = [] 
     , setOption = \_ _ -> Right t 
     } 
3

Существует не так много поддержки для detailed-0.9. Для его использования можно подключить существующие библиотеки тестирования, но даже тогда вы не получите информацию о ходе по мере прохождения тестов.

Я рекомендую использовать интерфейс exitcode-stdio-1.0 вместе с существующей базой тестирования + использовать GHCi во время разработки.

Полный пример для Hspec находится здесь https://github.com/sol/hspec-example.

 Смежные вопросы

  • Нет связанных вопросов^_^