如何保存单元测试.测试结果



如果我尝试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)

最新更新