我正在運行nosetest,它具有需要加載與生產數據庫不同的數據庫的設置功能。我使用的ORM是peewee,它要求定義模型的數據庫。Python:基於nosetest是否正在運行的條件變量
所以我需要設置一個條件變量,但我不知道使用什麼條件來檢查nosetest是否正在運行該文件。
我閱讀堆棧溢出,你可以檢查nose
sys.modules
,但我想知道是否有更確切的方法來檢查鼻子是否運行。
我正在運行nosetest,它具有需要加載與生產數據庫不同的數據庫的設置功能。我使用的ORM是peewee,它要求定義模型的數據庫。Python:基於nosetest是否正在運行的條件變量
所以我需要設置一個條件變量,但我不知道使用什麼條件來檢查nosetest是否正在運行該文件。
我閱讀堆棧溢出,你可以檢查nose
sys.modules
,但我想知道是否有更確切的方法來檢查鼻子是否運行。
也許檢查sys.argv[0]
以查看哪個命令正在運行?
檢查sys.argv可能會奏效,但您可以用nosetests
或執行鼻子,這顯然會給你一個不同的結果。
我認爲更可靠的方法是檢查堆棧並查看是否通過名爲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)
'進口SYS; testing = sys.argv [0] .endswith('nosetests')' – msiemens