2010-02-24 14 views
5

Tengo algunas pruebas que deben contar el número de advertencias generadas por una función. En Python 2.6 esto es simple, utilizandoAdvertencias de recuento en Python 2.4

with warnings.catch_warnings(record=True) as warn: 
    ... 
    self.assertEquals(len(warn), 2) 

Desafortunadamente, with no está disponible en Python 2.4, así que lo que más puedo usar? I no se puede simplemente compruebe si ha habido una sola advertencia (usando el filtro de advertencia con action='error' y try/catch), porque el número de advertencias es significativo.

Respuesta

6

Iba a sugerir la misma solución como Ignacio, ejemplo un poco más completa de código de prueba:

import warnings 

def setup_warning_catcher(): 
    """ Wrap warnings.showwarning with code that records warnings. """ 


    caught_warnings = [] 
    original_showwarning = warnings.showwarning 

    def custom_showwarning(*args, **kwargs): 
     caught_warnings.append(args[0]) 
     return original_showwarning(*args, **kwargs) 

    warnings.showwarning = custom_showwarning 
    return caught_warnings 


caught_warnings_list = setup_warning_catcher() 

# trigger warning here 

assert len(caught_warnings_list) == 1 
3

Lo que puede hacer es duplicar el comportamiento de warnings.catch_warnings() usted mismo. Guarde el valor actual de warnings.showwarning y reemplácelo con una función que guarda la advertencia en una lista, luego, después de la prueba de rutina, la longitud de la lista y luego restaure warnings.showwarning.

oldsw = warnings.showwarning 
warnings.showwarning = myshowwarning 
    ... 
self.assertEquals(len(somewarninglist), 2) 
warnings.showwarning = oldsw 
Cuestiones relacionadas