2013-07-03 3 views
2

Si j'essaie de décaper unittest.TestResult de manière évidenteComment sauver unittest.TestResult

import pickle 
    import unittest 

    pickle_file = open("temp" + ".pickle", 'w') 
    u=unittest.TestResult() 
    pickle.dump(u, pickle_file ) 

Je reçois l'erreur (avec Python 2,7)

TypeError: can't pickle file objects 

Cela permet de travailler en Python 2.6, mais dans 2.7 et plus tard, il apparaît que les descripteurs de fichiers ont été ajoutés à la classe TestResult. Alors, quelle est la méthode recommandée pour enregistrer les résultats des tests? Dois-je le faire à la dure et enregistrer manuellement chacun des champs?

+0

Si vous n'êtes intéressé que par l'examen des résultats et à ne pas besoin de l'état des TestResults réels, vous pouvez essayer d'utiliser la sortie XML de nez. https://nose.readthedocs.org/en/latest/ – theodox

Répondre

0

Remplacer les champs de type de fichier.

import pickle 
import unittest 

pickle_file = open("temp" + ".pickle", 'wb') 
u = unittest.TestResult() 
for k, v in vars(u).items(): 
    if isinstance(v, file): # if not picklable(v): 
     setattr(u, k, None) 
pickle.dump(u, pickle_file) 

Ou définir votre propre Pickler:

import pickle 
import unittest 

class SafePickler(pickle.Pickler): 
    def save(self, obj): 
     try: 
      pickle.Pickler.save(self, obj) 
     except TypeError, e: 
      pickle.Pickler.save(self, None) 

pickle_file = open("temp" + ".pickle", 'wb') 
u = unittest.TestResult() 
SafePickler(pickle_file).dump(u) 
+0

Merci. J'avais espéré que les développeurs les moins expérimentés avaient un meilleur moyen de sauver des résultats, mais je suppose que cela fonctionnera. –