2013-06-22 3 views
1

Я очень новичок в python, исходя из php-фона и не могу найти лучший способ организовать мой код.Python - код организации и набор тестов

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

Так идеально:

Problem 
    App 
     main.py 
    Tests 
     maintTest.py 

Использование PHP это очень просто, как я могу просто require_once нужный файл или изменить include_path.

Как это можно достичь в python? Очевидно, что это очень упрощенный пример, поэтому некоторые советы о том, как это приближается в более широком масштабе, также были бы чрезвычайно благодарны.

+0

См. Соответствующий вопрос http://stackoverflow.com/questions/1849311/how-should-i-organize-python-source-code – user1929959

ответ

0

Это зависит от того, какой тестовый бегун вы хотите использовать.

pytest

Недавно я научился, как pytest.

У него есть раздел о how to organize the code.

Если вы не можете импортировать свой главный код в код, вы можете использовать трюки ниже.

UnitTest

Когда я использую unittest Я делаю это так:

с импортом основной

Problem 
    App 
     main.py 
    Tests 
     test_main.py 

test_main.py

import sys 
import os 
import unittest 
sys.path.append(os.path.join(os.path.dirname(__file__), 'App')) 
import main 

# do the tests 

if __name__ == '__main__': 
    unittest.run() 

или с импортом App.main

Problem 
    App 
     __init__.py 
     main.py 
    Tests 
     test.py 
     test_main.py 

test.py

import sys 
import os 
import unittest 
sys.path.append(os.path.dirname(__file__)) 

test_main.py

from test import * 
import App.main 

# do the tests 

if __name__ == '__main__': 
    unittest.run() 
+0

Что такое __init__.py полезно в этом примере? –

+0

'__init __. Py' - пустой файл, который делает приложение пакетом. Это делает импорт импорта App 'App/__ init __. Py', и вы можете импортировать' App/main' с 'import App.main' – User

+0

Итак, python видит любые файлы __init__.py и добавляет это место в путь? –

0

Я всегда любил nosetests, так вот мое решение:

Problem

App 

    __init__.py 
    main.py 

Tests 

    __init__.py 
    tests.py 

Затем откройте командную строку, компакт-диск /path/to/Problem и тип:

nosetests Tests

он будет автоматически распознавать и запускать тесты.Тем не менее, прочитать:

Any python source file, directory or package that matches the testMatch regular expression (by default: (?:^|[b_.-])[Tt]est) will be collected as a test (or source for collection of tests). [...]

Within a test directory or package, any python source file matching testMatch will be examined for test cases. Within a test module, functions and classes whose names match testMatch and TestCase subclasses with any name will be loaded and executed as tests.

В основном это означает, что ваши тесты (как файлы и функция/методы/классы) должны начинаться с «тестом» или «Тест» словом.

Подробнее об использовании Nosetests здесь: Basic Usage.