2011-09-07 62 views
7

我正在運行nosetest,它具有需要加載與生產數據庫不同的數據庫的設置功能。我使用的ORM是peewee,它要求定義模型的數據庫。Python:基於nosetest是否正在運行的條件變量

所以我需要設置一個條件變量,但我不知道使用什麼條件來檢查nosetest是否正在運行該文件。

我閱讀堆棧溢出,你可以檢查nosesys.modules,但我想知道是否有更確切的方法來檢查鼻子是否運行。

回答

9

也許檢查sys.argv[0]以查看哪個命令正在運行?

+2

'進口SYS; testing = sys.argv [0] .endswith('nosetests')' – msiemens

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)