Питон:Условные переменные, основанные на том, запущен ли nosetest
Вопрос
Я запускаю nosetests, у которых есть функция настройки, которая должна загружать базу данных, отличную от рабочей базы данных.ORM, который я использую, - peewee, который требует, чтобы база данных для модели была задана в определении.
Итак, мне нужно установить условную переменную, но я не знаю, какое условие использовать, чтобы проверить, работает ли nosetest с файлом.
Я читал о переполнении стека, которое вы можете проверить nose
в sys.modules
но мне было интересно, есть ли более точный способ проверить, не течет ли из носа.
Решение
Возможно, изучая sys.argv[0]
чтобы посмотреть, какая команда запущена?
Другие советы
Проверка sys.argv может сработать, но вы можете выполнить nose либо с помощью nosetests
или python -m nose
, что, очевидно, даст вам другой результат.
Я думаю, что более надежный способ - это проверить стек и посмотреть, вызывается ли код через пакет с именем nose
.
Пример кода:
import inspect
import unittest
def is_called_by_nose():
stack = inspect.stack()
return any(x[0].f_globals['__name__'].startswith('nose.') for x in stack)
class TestFoo(unittest.TestCase):
def test_foo(self):
self.assertTrue(is_called_by_nose())
Пример использования:
$ python -m nose test_caller
.
----------------------------------------------------------------------
Ran 1 test in 0.009s
OK
$ nosetests test_caller
.
----------------------------------------------------------------------
Ran 1 test in 0.009s
OK
$ python -m unittest test_caller
F
======================================================================
FAIL: test_foo (test_caller.TestFoo)
----------------------------------------------------------------------
Traceback (most recent call last):
File "test_caller.py", line 14, in test_foo
self.assertTrue(is_called_by_nose())
AssertionError: False is not true
----------------------------------------------------------------------
Ran 1 test in 0.004s
FAILED (failures=1)