如果我尝试pickle unittest。明显方式的测试结果
import pickle
import unittest
pickle_file = open( "temp" + ".pickle", 'w' )
u=unittest.TestResult()
pickle.dump( u, pickle_file )
我得到错误(与Python 2.7)
TypeError: can't pickle file objects
这曾经在Python2.6中起作用,但在2.7及更高版本中,文件描述符似乎被添加到了TestResult
类中。那么,保存测试结果的推荐方法是什么呢?我必须以艰难的方式手动保存每个字段吗?
替换文件类型字段。
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)
或者定义你自己的拾荒者:
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)