Я получил ошибку, когда использую pickle с unittest.
Я написал 3 программных файла:
и настоящие коды, соответственно, следующие.
№1. ClassToPickle.py
import pickle
class ClassToPickle(object):
def __init__(self, x):
self.x = x
if __name__=="__main__":
p = ClassToPickle(10)
pickle.dump(p, open('10.pickle', 'w'))
№2. SomeClass.py
from ClassToPickle import ClassToPickle
import pickle
class SomeClass(object):
def __init__(self):
self.pickle = pickle.load(open("10.pickle", 'r'))
self.x = self.pickle.x
print self.x
if __name__ == "__main__":
SomeClass()
№3. SomeClassTest.py
import unittest
from SomeClass import SomeClass
from ClassToPickle import ClassToPickle # REQUIRED_LINE
class SomeClassTest(unittest.TestCase):
def testA(self):
sc = SomeClass()
self.assertEqual(sc.x, 10)
def main():
unittest.main()
if __name__ == "__main__":
main()
Сначала я запустил программу №1, чтобы создать файл рассола.
И затем, когда я запускаю только программный файл №2 (т.е. ввожу "python SomeClass.py"), он работает.
И когда я запускаю программу №3 в одиночку (т.е. ввожу "python SomeClassTest.py"), она также работает.
Однако, когда я запускаю программу №3 как «unit-test» в eclipse + pydev, она возвращает сообщение об ошибке ниже.
=============================================== =======================
ОШИБКА: testA (SomeClassTest.SomeClassTest)
--- -------------------------------------------------- -----------------
Отслеживание (последний вызов последний):
$ File "/ home / tmp / pickle_problem /SomeClassTest.py ", строка 9, в testA
sc = SomeClass ()
$ File" /home/tmp/pickle_problem/SomeClass.py ", строка 8, в init
self.pickle = pickle.load (open ("10.pickle", 'r'))
$ File "/usr/lib/python2.7/pickle .py ", строка 1378, в load
return Unpickler (file) .load ()
$ File" /usr/lib/python2.7/pickle.py ", строка 858, в load
dispatchkey
Файл "/usr/lib/python2.7/pickle.py", строка 1090, в load_global
klass = self.find_class (module, name)
$ File "/usr/lib/python2.7/pickle.py", строка 1126, в find_class
klass = getattr (mod, name)
$ AttributeError: ' модуль ' объект не имеет атрибута 'ClassToPickle'
---------------------------------------- ------------------------------
Выполнить 1 тест за 0,002 с
НЕ ПРОШЛО (ошибки = 1)
А также, когда я закомментировал строку, импортирующую класс ClassToPickle (строка 3 в программе № 3 и прокомментированная как «REQUIRED_LINE»), она не работает и возвращает сообщение об ошибке, описанное ниже.
E
====================================== ================================
ОШИБКА: testA ( main .SomeClassTest)
---------------------------------------- ------------------------------
Отслеживание (последний вызов последний):
{ {1}} Файл SomeClassTest.py, строка 9, в testA
sc = SomeClass ()
Файл "/home/tmp/pickle_problem/SomeClass.py" , строка 8, в init
self.pickle = pickle.load (open ("10.pickle", 'r'))
Файл "/ usr / lib / python2. 7 / pickle.py ", строка 1378, в load
return Unpickler (file) .load ()
File" /usr/lib/python2.7/pickle. py ", строка 858, в load
dispatchkey
Файл" /usr/lib/python2.7/pickle.py ", строка 1090, в load_global
{ {1}} klass = self.find_class (module, name)
Файл "/usr/lib/python2.7/pickle.py", строка 1126, в find_class
{{1} } klass = getattr (mod, name)
AttributeError: объект 'модуль' не имеет атрибута 'ClassToPickle'
------------------ -------------------------------------------------- -
Выполнен 1 тест за 0,001 с.
FAILED (errors = 1)
Я предполагаю, что проблема связана с пространством имен в python, но я не знаю, что именно произошло и что я могу сделать для ее решения.
Как я могу "запустить как модульный тест (в eclipse + pydev)" программу №3 правильно,
и запустить программу №3 в командной строке без строки, которая импортирует ClassToPickle?
Пожалуйста, помогите мне.