Питон:Условные переменные, основанные на том, запущен ли nosetest

StackOverflow https://stackoverflow.com/questions/7341005

  •  27-10-2019
  •  | 
  •  

Вопрос

Я запускаю 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)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top