Я хотел бы написать тест, но этот тест пройдет только в том случае, если установлен модуль nlopt
. Так как этот модуль необязательный, мне было интересно, есть ли способ написать тест, который не будет препятствовать тому, чтобы py.test завершился неудачно, если модуль отсутствует. на данный момент, py.test останавливается, поскольку он не может найти модуль nlopt
:Ошибка py.test из-за недостающего модуля
$ make test
py.test --exitfirst tests/
============================================================= test session starts =============================================================
platform darwin -- Python 3.4.2 -- py-1.4.26 -- pytest-2.6.4
collecting 0 items/1 errors
=================================================================== ERRORS ====================================================================
_____________________________________________ ERROR collecting tests/unit/fem/test_simulation.py ______________________________________________
tests/unit/fem/test_simulation.py:5: in <module>
from hybrida.fem import Simulation, Step, Eigenvalue
src/hybrida/__init__.py:4: in <module>
from . import geometry
src/hybrida/geometry/__init__.py:3: in <module>
from . import distance
src/hybrida/geometry/distance.py:9: in <module>
import nlopt
E ImportError: No module named 'nlopt'
--------------------------------------------------------------- Captured stdout ---------------------------------------------------------------
nlopt does not seem to be installed.
=========================================================== short test summary info ===========================================================
ERROR tests/unit/fem/test_simulation.py
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Interrupted: stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
=========================================================== 1 error in 0.67 seconds ===========================================================
make: *** [test] Error 2
Я пытался добавить try-except
блок в начале тестового файла, но это не помогло:
try:
import nlopt
import numpy as np
except ImportError:
print("""nlopt does not seem to be installed""")
Модуль nlopt
используется внутри библиотеки, для которой я пишу тест. В настоящее время библиотека вызывает исключение, если модуль не найден. На верхнем уровне файла, который использует модуль:
try:
import nlopt
except ImportError:
print("""\033[91m nlopt does not seem to be installed. Please install it by downloading nlopt, and installing it using
$ ./configure --enable-shared
$ make
$ make install
and adding /usr/local/lib/Python3.4/site-packages to the PYTHONPATH
(or wherever nlopt has been installed):
export PYTHONPATH=$PYTHONPATH:/usr/local/lib/Python3.4/site-packages
Note: although Homebrew provides nlopt, it does not install the Python interface.\033[0m""")
raise
Я пробовал это, но код все еще не работает внутри библиотеки, для которой я предоставил тест, так как внутри библиотеки есть также «import nlopt», который вызывает исключение, если он не может найти модуль. – aaragon
Вы можете переместить этот 'import' внутри функций, которые на самом деле его используют, вместо того, чтобы иметь верхний уровень. – tzaman
Вы имеете в виду на стороне библиотеки или на тестовой стороне? – aaragon