# 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
аналогична команде 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
.
Этот пакет и набор утилит пока что не входит в стандартную поставку Python, однако о нем нужно знать тем, кто хочет быстро готовить документацию (руководства пользователя и т.п.) для своих модулей. Этот пакет использует специальный язык разметки (ReStructuredText
), из которого потом легко получается документация в виде HTML, LaTeX и в других форматах. Текст в формате RST легко читать и в исходном виде. С этим инструментом можно познакомиться на http://docutils.sourceforge.net
Данный пакет предоставляет стандартный путь для распространения собственных Python–пакетов. Достаточно написать небольшой конфигурационный файл setup.py
, использующий distutils
, и файл с перечислением файлов проекта MANIFEST.in
, чтобы пользователи пакета смогли его установить командой
python setup.py install
Тонкости работы с distutils
можно изучить по документации.
Взаимодействие с операционной системой
Различные операционные системы имеют свои особенности. Здесь рассматривается основной модуль этой категории, функции которого работают на многих операционных системах.
Разделители каталогов и другие связанные с этим обозначения доступны в виде констант.
Константа | Что обозначает |
---|---|
os.curdir |
Текущий каталог |
os.pardir |
Родительский каталог |
os.sep |
Разделитель элементов пути |
os.altsep |
Другой разделитель элементов пути |
os.pathsep |
Разделитель путей в списке путей |
os.defpath |
Список путей по умолчанию |
os.linesep |
Признак окончания строки |