2011-09-07 9 views
7

Sto eseguendo nosetest che hanno una funzione di installazione che deve caricare un database diverso dal database di produzione. L'ORM che sto usando è peewee che richiede che il database per un modello sia impostato nella definizione.Python: variabili condizionali in base al fatto che nosetest sia in esecuzione

Quindi ho bisogno di impostare una variabile condizionale ma non so quale condizione utilizzare per verificare se nosetest sta eseguendo il file.

Ho letto su Stack Overflow che è possibile verificare per nose in sys.modules ma mi chiedevo se c'è un modo più esatto per verificare se il naso è in esecuzione.

risposta

9

Forse esaminando sys.argv[0] per vedere quale comando è in esecuzione?

+2

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

0

Esaminando sys.argv potrebbe funzionare, ma è possibile eseguire il naso sia con nosetests o python -m nose, che ovviamente ti darà un risultato diverso.

Penso che il modo più efficace sia quello di ispezionare lo stack e vedere se il codice viene chiamato tramite un pacchetto chiamato nose. Codice

Esempio: utilizzo

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()) 

Esempio:

$ 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) 
Problemi correlati