пространство имен на Python Pickle

Я получил ошибку, когда я использую рассол с unittest.

Я написал 3 программных файла:

для маринованного класса,для класса, который использует класс в # 1,unittest для тестирования класса # 2.

и реальные коды являются следующими соответственно.

# 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)
-------------------------------------------------- --------------------
Traceback (последний вызов был последним):
Файл $ "/home/tmp/pickle_problem/SomeClassTest.py", строка 9, в testA
sc = SomeClass ()
Файл $ /home/tmp/pickle_problem/SomeClass.py ", строка 8, вв этом
self.pickle = pickle.load (open ("10.pickle", 'r'))
Файл $ /usr/lib/python2.7/pickle.py, строка 1378, в загрузке
вернуть Unpickler (файл) .load ()
Файл $ /usr/lib/python2.7/pickle.py, строка 858, в загрузке
dispatchkey
Файл "/usr/lib/python2.7/pickle.py", строка 1090, в load_global
klass = self.find_class (модуль, имя)
Файл $ "/usr/lib/python2.7/pickle.py", строка 1126, в классе find_class
klass = getattr (мод, имя)
$ AttributeError: у объекта 'module' нет атрибута 'ClassToPickle'

-------------------------------------------------- --------------------
Пробежал 1 тест за 0.002 с

СБОЙ (ошибки = 1)

А также, когда я закомментировал строку, которая импортирует класс ClassToPickle (строка 3 в программе № 3 и закомментирована как «REQUIRED_LINE»), она не работает и возвращает сообщение об ошибке, описанное ниже.

E
================================================== ====================
ОШИБКА: testA (главный.SomeClassTest)
-------------------------------------------------- --------------------
Traceback (последний вызов был последним):
Файл "SomeClassTest.py", строка 9, в testA
sc = SomeClass ()
Файл "/home/tmp/pickle_problem/SomeClass.py", строка 8, вв этом
self.pickle = pickle.load (open ("10.pickle", 'r'))
Файл "/usr/lib/python2.7/pickle.py", строка 1378, в загрузке
вернуть Unpickler (файл) .load ()
Файл "/usr/lib/python2.7/pickle.py", строка 858, в загрузке
dispatchkey
Файл "/usr/lib/python2.7/pickle.py", строка 1090, в load_global
klass = self.find_class (модуль, имя)
Файл "/usr/lib/python2.7/pickle.py", строка 1126, в классе find_class
klass = getattr (мод, имя)
AttributeError: у объекта 'module' нет атрибута 'ClassToPickle'

-------------------------------------------------- --------------------
Пробежал 1 тест за 0.001с

СБОЙ (ошибки = 1)

Я предполагаю, что проблема заключается в пространстве имен в python, но я не знаю, что именно произошло, и что я могу сделать для его решения.

Как я могу "запустить как юнит-тест (в eclipse + pydev)" программу # 3 правильно,
и запустить программу # 3 в командной строке без строки, которая импортирует ClassToPickle?
Пожалуйста, помогите мне.

Ответы на вопрос(1)

Ваш ответ на вопрос