Question

J'ai quelques tests qui ont besoin de compter le nombre d'avertissements soulevés par une fonction. En Python 2.6 est simple, en utilisant

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

Malheureusement, with n'est pas disponible en Python 2.4, que pourrais-je utiliser? I ne peuvent pas simplement vérifier s'il y a eu un seul avertissement (en utilisant un filtre d'avertissement avec action='error' et try / catch), parce que le nombre d'avertissements est significatif.

Était-ce utile?

La solution

Je voulais vous proposer la même solution que Ignacio, un peu plus complet exemple de code de test:

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

Autres conseils

Qu'est-ce que vous pouvez faire est de reproduire le comportement de warnings.catch_warnings() vous . Enregistrer la valeur actuelle de warnings.showwarning et le remplacer par une fonction qui permet d'économiser l'avertissement dans une liste, puis après le test de routine de la longueur de la liste et puis restaurer warnings.showwarning.

oldsw = warnings.showwarning
warnings.showwarning = myshowwarning
  ...
self.assertEquals(len(somewarninglist), 2)
warnings.showwarning = oldsw
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top