2011-09-07 13 views
7

Estoy ejecutando nosetests que tienen una función de configuración que necesita cargar una base de datos diferente a la base de datos de producción. El ORM que estoy usando es peewee que requiere que la base de datos para un modelo esté configurada en la definición.Python: variables condicionales basadas en si nosetest se está ejecutando

Así que tengo que establecer una variable condicional, pero no sé qué condición usar para comprobar si nosetest está ejecutando el archivo.

Leí en Desbordamiento de pila que puede consultar nose en sys.modules, pero me preguntaba si existe una manera más exacta de comprobar si la nariz está funcionando.

Respuesta

9

¿Quizás examinando sys.argv[0] para ver qué comando se está ejecutando?

+2

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

0

Examinar sys.argv podría funcionar, pero puede ejecutar nose con nosetests o python -m nose, lo que obviamente le dará un resultado diferente.

Creo que la forma más robusta es inspeccionar la pila y ver si el código se llama a través de un paquete llamado nose. código

Ejemplo: uso

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

Ejemplo:

$ 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) 
Cuestiones relacionadas