Python: условные переменные в зависимости от того, запущено ли тестирование носа - PullRequest
7 голосов
/ 08 сентября 2011

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

Поэтому мне нужно установить условную переменную, но я не знаю, какое условие использовать для проверкиесли в тесте на нос запускается файл.

Я прочитал в переполнении стека, что вы можете проверить наличие nose в sys.modules, но мне было интересно, есть ли более точный способ проверить, работает ли нос.*

Ответы [ 2 ]

10 голосов
/ 08 сентября 2011

Возможно, проверяя sys.argv[0], чтобы увидеть, какая команда выполняется?

0 голосов
/ 18 ноября 2017

Изучение sys.argv может сработать, но вы можете выполнить перенос с помощью 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)
...