История изменений
Исправление fsb4000, (текущая версия) :
разбиваешь фунции на модули/файлы и пишешь тесты. На каждом языке будет выглядеть по своему.
Вот бредовый пример на Haskel:
module MyTest where
import Test.Hspec
import Test.QuickCheck
main = hspec $ do
describe "myfunc" $ do
-- проверяем ответ на конкретных входных данных
it "should work for some examples" $ do
myfunc "AWUBBWUBC" `shouldBe` "A B C"
myfunc "AWUBWUBWUBBWUBWUBWUBC" `shouldBe` "A B C"
myfunc "WUBAWUBBWUBCWUB" `shouldBe` "A B C"
-- Или если мы знаем медленное решение, то проверяем что наше
-- быстрое решение выдаёт теже ответы что и быстрое
-- на случайных данных
it "should work for WUBranWUBWUBdomWUBWUB values" $ do
property $ forAll (fmap concat $ listOf $ elements $ replicate 5 "WUB" ++ map return ['A'..'Z']) $ \xs ->
myfunc xs `shouldBe` slow_solution xs
where slow_solution :: String -> String
slow_solution = unwords . words . go
where go [] = []
go ('W':'U':'B':xs) = ' ' : go xs
go (x:xs) = x : go xs
Заодно быстрее понимаешь что функции тесно связаны друг с другом и у тебя корявый дизайн и нужно переделать, чтобы было легко тестировать…
вот небольшой список бесплатных статеек на некоторых языках: https://github.com/unicodeveloper/awesome-tdd
Исходная версия fsb4000, :
разбиваешь фунции на модули/файлы и пишешь тесты. На каждом языке будет выглядеть по своему.
Вот бредовый пример на Haskel:
module MyTest where
import Test.Hspec
import Test.QuickCheck
main = hspec $ do
describe "myfunc" $ do
-- проверяем ответ на конкретных входных данных
it "should work for some examples" $ do
myfunc "AWUBBWUBC" `shouldBe` "A B C"
myfunc "AWUBWUBWUBBWUBWUBWUBC" `shouldBe` "A B C"
myfunc "WUBAWUBBWUBCWUB" `shouldBe` "A B C"
-- Или если мы знаем медленное решение, то проверяем что наше
-- быстрое решение выдаёт теже ответы что и быстрое
-- на случайных данных
it "should work for WUBranWUBWUBdomWUBWUB values" $ do
property $ forAll (fmap concat $ listOf $ elements $ replicate 5 "WUB" ++ map return ['A'..'Z']) $ \xs ->
myfunc xs `shouldBe` slow_solution xs
where slow_solution :: String -> String
slow_solution = unwords . words . go
where go [] = []
go ('W':'U':'B':xs) = ' ' : go xs
go (x:xs) = x : go xs
Заодно быстрее понимаешь что функции тесно связаны друг с другом и у тебя корявый дизайн и нужно переделать, чтобы было легко тестировать…