2011-09-07 5 views
7

मैं नोजेटेस्ट चला रहा हूं जिसमें सेटअप फ़ंक्शन है जो उत्पादन डेटाबेस की तुलना में एक अलग डेटाबेस लोड करने की आवश्यकता है। मैं जिस ओआरएम का उपयोग कर रहा हूं वह पेवी है जिसके लिए एक मॉडल के लिए डेटाबेस परिभाषा में सेट किया गया है।पायथन: नोसेटेट चल रहा है या नहीं, इस पर आधारित सशर्त चर

तो मुझे एक सशर्त चर सेट करने की आवश्यकता है, लेकिन मुझे नहीं पता कि यह जांचने के लिए कि किस स्थिति में नोसेटेट चल रहा है या नहीं।

मैंने स्टैक ओवरफ़्लो पर पढ़ा है कि आप sys.modules में देख सकते हैं लेकिन मैं सोच रहा था कि नाक चल रहा है या नहीं, यह जांचने का एक और सटीक तरीका है।

उत्तर

9

शायद यह देखने के लिए कि क्या आदेश चल रहा है sys.argv[0] जांच रहा है?

+2

'आयात sys; परीक्षण = sys.argv [0] .endswith ('nosetests') ' – msiemens

0

जांच 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) 
संबंधित मुद्दे