Как подавить ImportWarning в скрипте Python unittest
В данный момент я запускаю unittest скрипт, который успешно проходит различные указанные тесты с нытьем ImportWarning сообщение в консоли:
...../lib/python3.6/importlib/_bootstrap.py:219: ImportWarning: can't resolve package from __spec__ or __package__, falling back on __name__ and __path__
return f(*args, **kwds)
....
----------------------------------------------------------------------
Ran 7 tests in 1.950s
OK
Скрипт запускается с этой основной функцией:
if __name__ == '__main__':
unittest.main()
Я читал, что предупреждения могут быть превзойдены, когда скрипт вызывается следующим образом:
python -W ignore:ImportWarning -m unittest testscript.py
Однако есть ли способ указать это предупреждение игнорирования в самом скрипте, чтобы мне не приходилось вызывать -W ignore:ImportWarning
каждый раз, когда testscript бежать?
Заранее благодарю.
2 ответа:
Чтобы программно предотвратить появление таких предупреждений, измените код таким образом, чтобы:
import warnings if __name__ == '__main__': with warnings.catch_warnings(): warnings.simplefilter('ignore', category=ImportWarning) unittest.main()
У меня была та же проблема, и запуск моего unittest сценария с оператором
warnings.simplefilter()
, как описано Nels, не сработал для меня. Согласно этому источнику , это происходит потому, что:Этот же источник рекомендует обновить фильтр внутри каждой тестовой функции, либо непосредственно, либо с помощью элегантного декоратора. Более простым решением является определение фильтра предупреждений внутри метода unittest[...] начиная с Python 3.2, модуль unittest был обновлен для использования фильтра по умолчанию модуля warnings при выполнении тестов, и [...] сбрасывает фильтр по умолчанию перед каждым тестом , что означает, что любое изменение, которое вы можете подумать, что вы делаете scriptwide, используя предупреждения.simplefilter ("игнорировать") на начало вашего сценария переопределяется между каждым тестом.
setUp()
, который запускается непосредственно перед каждым тестом.import unittest class TestSomething(unittest.TestCase): def setUp(self): warnings.simplefilter('ignore', category=ImportWarning) # Other initialization stuff here def test_a(self): # Test assertion here. if __name__ == '__main__': unittest.main()