Как запустить тестовый пакет unitest из родительского каталога - PullRequest
0 голосов
/ 03 мая 2018

У меня следующая структура каталогов:

.
├── README.md
├── src
│   ├── __init__.py
│   └── foo.py
└── test
    ├── __init__.py
    └── runner.py
    └── test_foo.py

Где тестовые файлы выглядят так:

test_foo.py

import unittest
from ..src.foo import *

class TestFoo(unittest.TestCase):
        def setUp(self):
            pass
        
        def test_foo(self):
            foo = Foo()
            res = foo.get_something('bar')
        
            if res is None:
                self.fail('something bad happened')

if __name__ == '__main__':
    unittest.main(self)

runner.py

import unittest

# import test modules
import test_foo

# initialize the test suite
loader = unittest.TestLoader()
suite  = unittest.TestSuite()

# add tests to the test suite
suite.addTests(loader.loadTestsFromModule(test_foo))

# initialize a runner, pass it your suite and run it
runner = unittest.TextTestRunner(verbosity=3)
result = runner.run(suite)

Я хотел бы запустить все свои тесты из родительского каталога в тестовом наборе, поэтому я пытаюсь вызвать юниты следующим образом:

python -m test/runner.py

Но он жалуется на следующее:

$ python -m test/runner.py 
/usr/bin/python: Import by filename is not supported.

если я перейду в тестовый каталог, я получу другую ошибку:

$ python -m runner
  File "test_foo.py", line 2, in <module>
    from ..src.foo import *
ValueError: Attempted relative import in non-package

Я хотел бы сохранить все связанные с тестами материалы в каталоге parent / test, если это возможно.

Есть идеи, что я здесь не так делаю?

Спасибо!

1 Ответ

0 голосов
/ 03 мая 2018

попробуй python -m unittest test.runner. Вот структура, которую я использовал.

├── README.md
├── src
│   ├── __init__.py
│   └── foo.py
└── test
    ├── __init__.py
    └── test_foo.py
    └── runner.py

my foo.py содержит простую функцию, foo. Я изменил оператор импорта в test_foo.py на следующий:

from src.foo import foo.

Я также бежал прямо с runner.py со следующими изменениями.

from test import test_foo

и затем в командной строке в родительском каталоге, python -m unittest test.runner

Эта структура работает только из родительского каталога. Если я попробую его в тестовом каталоге, он не сможет импортировать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...