пространство имен в python pickle

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

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

  1. для класса, который нужно мариновать,
  2. для класса, который использует класс в №1,
  3. 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)
--- -------------------------------------------------- -----------------
Отслеживание (последний вызов последний):
$ 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?
Пожалуйста, помогите мне.

7
задан fbessho 28 October 2011 в 11:17
поделиться