Картинка для привлечения внимания. Красивый питон, да?
Pythoscope
Благо, мы программисты — народ ленивый, готовы убить пару недель убить для того, что бы решить часовую задачу за пять минут. Так что за несколько минут гугления в яндексе я нашел коллег по несчастью и интересное решение по облегчению написания тестов.
Устанавливаем Pythoscope:
sudo pip install Pythoscope
sudo apt-get install bzr bzr branch lp:pythoscope cd pythoscope/ python setup.py install
Протестируем кота
Что бы тестировать кота, нам сначала собственно нужен кот. Напишем его:
# cat.py class Cat(object): def __init__(self, name='Tom'): self.name = name def eat(self, food): if food == 'fish': return 'Yummy!' else: return 'Ugh!'
Теперь перейдем в папку с cat.py и инициализируем Pythoscope:
pythoscope --init
Команда создаст папку .pythoscope, где хранится вся информация, связанная с Pythoscope. А теперь, наконец, генерация собственно тестов:
pythoscope cat.py
У нас появилась папка tests с вложенным cat_test.py. В котором… Почти ничего нет:
# tests/cat_test.py import unittest class TestCat(unittest.TestCase): def test___init__(self): # cat = Cat(name) assert False # TODO: implement your test here def test_eat(self): # cat = Cat(name) # self.assertEqual(expected, cat.eat(food)) assert False # TODO: implement your test here if __name__ == '__main__': unittest.main()
Негусто? Ну, по крайней мере теперь есть каркас, который будет экономить нам время при написании тестов.
Как выяснилось, магии не бывает — тесты сами не напишутся. Но не всё потеряно, мы можем помочь Pythoscope понять, что запускать для тестов. Для этого реализавны, так называемые «точки входа» (points of entry) — некие use-case использования нашего кода.
Напишем points of entry для нашего котэ:
# .pythoscope/points-of-entry/eat_fish_poe.py from cat import Cat Cat().eat('fish')
Запустим еще раз генерацию тестов:
pythoscope cat.py
Теперь лучше, к тестовому классу добавился метод который действительно что-то тестирует:
# tests/cat_test.py ... def test_eat_returns_Yummy_for_fish_after_creation_with_Tom(self): cat = Cat('Tom') self.assertEqual('Yummy!', cat.eat('fish')) ...
А что если подсунуть котэ не рыбу? Ошибка? Надо и это проверить:
# .pythoscope/points-of-entry/eat_tomato_poe.py from cat import Cat Cat().eat('tomato')
Генерируем:
pythoscope cat.py
Отлично, осталось лишь проверить:
nosetests .. ---------------------------------------------------------------------- Ran 2 tests in 0.001s OK
Превосходно! Удачного и легкого тестирования!
ссылка на оригинал статьи http://habrahabr.ru/post/192512/
Добавить комментарий