Выбрать главу

# file: test_Sieve.py

import Sieve, sets

import unittest

class TestSieve(unittest.TestCase):

 def setUp(self):

  pass

 def testone(self):

  primes = Sieve.primes(1)

  self.assertEqual(primes, sets.Set())

 def test100(self):

  primes = Sieve.primes(100)

  self.assert_(primes == sets.Set([2, 3, 5, 7, 11, 13,

   17, 19, 23, 29, 31, 37, 41, 43, 47,

   53, 59, 61, 67, 71, 73, 79, 83, 89, 97]))

if __name__ == '__main__':

 unittest.main()

Тестовый модуль состоит из определения класса, унаследованного от класса unittest.TestCase, в котором описывается подготовка к испытаниям (метод setUp) и сами испытания — методы, начинающиеся на test. В данном случае таких испытаний всего два: в первом испытывается случай N=1, а во втором — N=100.

Запуск тестов производится выполнением функции unittest.main(). Вот как выглядят успешные испытания:

$ python test_Sieve.py

..

----------------------------------------------------------

Ran 2 tests in 0.002s

OK

В процессе разработки перед каждым выпуском все модули прогоняются через регрессионные испытания, чтобы обнаружить, не были ли внесены ошибки. Однако никакие тесты в общем случае не могут гарантировать безошибочности сложной программы. При дополнении модулей тесты также могут быть дополнены, чтобы отразить изменения в проекте.

Кстати, сам Python и его стандартная библиотека имеют тесты для каждого модуля — они находятся в каталоге test в месте, где развернуты файлы поставки Python, и являются частью пакета test.

Модуль pydoc

Успех проекта зависит не только от обеспечения эффективного и качественного кода, но и от качества документации. Утилита pydoc аналогична команде man в Unix:

$ pydoc Sieve

Help on module Sieve:

NAME

    Sieve — Модуль для вычисления простых чисел от 2 до N

FILE

    Sieve.py

FUNCTIONS

    primes(N)

         Возвращает все простые от 2 до N

Эта страница помощи появилась благодаря тому, что были написаны строки документации — как ко всему модулю, так и к функции primes(N).

Стоит попробовать запустить pydoc следующей командой:

pydoc –p 8088

И направить браузер на URL http://127.0.0.1:8088/ — можно получить документацию по модулям Python в виде красивого web–сайта.

Узнать другие возможности pydoc можно, подав команду pydoc pydoc.

Пакет docutils

Этот пакет и набор утилит пока что не входит в стандартную поставку Python, однако о нем нужно знать тем, кто хочет быстро готовить документацию (руководства пользователя и т.п.) для своих модулей. Этот пакет использует специальный язык разметки (ReStructuredText), из которого потом легко получается документация в виде HTML, LaTeX и в других форматах. Текст в формате RST легко читать и в исходном виде. С этим инструментом можно познакомиться на http://docutils.sourceforge.net

Пакет distutils

Данный пакет предоставляет стандартный путь для распространения собственных Python–пакетов. Достаточно написать небольшой конфигурационный файл setup.py, использующий distutils, и файл с перечислением файлов проекта MANIFEST.in, чтобы пользователи пакета смогли его установить командой

python setup.py install

Тонкости работы с distutils можно изучить по документации.

Взаимодействие с операционной системой

Различные операционные системы имеют свои особенности. Здесь рассматривается основной модуль этой категории, функции которого работают на многих операционных системах.

Модуль os

Разделители каталогов и другие связанные с этим обозначения доступны в виде констант.

Константа Что обозначает
os.curdir Текущий каталог
os.pardir Родительский каталог
os.sep Разделитель элементов пути
os.altsep Другой разделитель элементов пути
os.pathsep Разделитель путей в списке путей
os.defpath Список путей по умолчанию
os.linesep Признак окончания строки