unittesting не работает, потому что импортированный файл в качестве входных данных - PullRequest
0 голосов
/ 15 мая 2018

У меня есть проект, который в качестве фактической структуры:

Project
   |-setup.py
   |
   |-Code
   |  |-exemple.py
   |
   |-Test
      |-testExemple.py

Я хочу, чтобы моя установка была автоматизирована, чтобы установить файлы и каталоги путей, какими бы они ни были. Итак, в моем Setup.py у меня есть 30 импортов, но затем у меня есть входные данные:

testFolderNameSetup = input("Enter the name of the folder containing your tests:")
testFolderNameSetup = "./" + str(testFolderNameSetup)
testFolderPathNameSetup = (os.path.abspath(os.path.join(os.path.dirname(__file__), testFolderNameSetup)))

if os.path.exists(testFolderPathNameSetup):
     sys.path.insert(0, testFolderPathNameSetup)

Дело в том, что когда я импортирую настройки в свой testExample.py, как это

from setup import *

и я запускаю юнит-тесты, получаю это сообщение об ошибке

Testing started at 9:02 AM ...
C:\Users\marc-\AppData\Local\Continuum\anaconda3\python.exe "C:\Program Files\JetBrains\PyCharm Community Edition 2018.1.2\helpers\pycharm\_jb_pytest_runner.py" --target testExemple.py::TestExample.testAdd
Launching py.test with arguments testExemple.py::TestExample::testAdd in C:\Users\marc-\Documents\GitHub\BasicProjectArchitecture\test

============================= test session starts =============================
platform win32 -- Python 3.6.3, pytest-3.2.1, py-1.4.34, pluggy-0.4.0
rootdir: C:\Users\marc-\Documents\GitHub\BasicProjectArchitecture, inifile:Enter the name of the folder containing your code:
test/testExemple.py:None (test/testExemple.py)
testExemple.py:2: in <module>
    from setup import *
..\setup.py:21: in <module>
    codeFolderNameSetup = get_input("Enter the name of the folder containing your code:")
..\setup.py:14: in get_input
    return input(text)
..\..\..\..\AppData\Local\Continuum\anaconda3\lib\site-packages\_pytest\capture.py:459: in read
    raise IOError("reading from stdin while output is captured")
E   OSError: reading from stdin while output is captured

=================================== ERRORS ====================================
____________________ ERROR collecting test/testExemple.py _____________________
testExemple.py:2: in <module>
    from setup import *
..\setup.py:21: in <module>
    codeFolderNameSetup = get_input("Enter the name of the folder containing your code:")
..\setup.py:14: in get_input
    return input(text)
..\..\..\..\AppData\Local\Continuum\anaconda3\lib\site-packages\_pytest\capture.py:459: in read
    raise IOError("reading from stdin while output is captured")
E   OSError: reading from stdin while output is captured
------------------------------- Captured stdout -------------------------------
Enter the name of the folder containing your code:
=========================== 1 error in 0.22 seconds ===========================
ERROR: not found: C:\Users\marc-\Documents\GitHub\BasicProjectArchitecture\test\testExemple.py::TestExample::testAdd
(no name 'C:\\Users\\marc-\\Documents\\GitHub\\BasicProjectArchitecture\\test\\testExemple.py::TestExample::testAdd' in any of [<Module 'test/testExemple.py'>])

Process finished with exit code 0

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

Если у кого-то есть идеи, как решить эту проблему, пожалуйста, помогите!

Спасибо!

-------------------- РЕДАКТИРОВАТЬ # 1 -----------------

Кажется, что когда я импортирую setup.py, он запускает его! Я попытался импортировать в базовую функцию, и он запускает установочный код ... Возможно, поэтому устройство не работает. Я постараюсь решить это и вернусь с ответом.

1 Ответ

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

Проблема решена.

Просто и красиво, в python есть строка, которая указывает коду запускаться только в том случае, если он запущен напрямую.

if __name__ == "__main__"

Я считаю, что файл как неотъемлемый __name__, который дается при запуске, и это имя "__main__" только при непосредственном запуске. Таким образом, я могу импортировать настройки, не имея проблем с их запуском в моем лице и связываясь с моими кодами и тестами.

Добрый день!

...