2015-08-28 6 views
2

У меня есть два класса:Как исправить метод базового класса?

class A(object): 
    def get_something(self): 
     return 1 

class B(A): 
    pass 

и когда я пытаюсь исправить A.get_something в тестах он терпит неудачу.

from some_module.myclasses import B 

... 
def test_something(self): 
    with patch('some_module.myclasses.A.get_something', return_value=2): 
     self.assertEqual(B().get_something(), 2) 

Что здесь не так?

ответ

2

Обнаружили. Я должен патч импортирован A

from some_module.myclasses import A, B 

... 
def test_something(self): 
    with patch.object(A, 'get_something', return_value=2): 
     self.assertEqual(B().get_something(), 2) 
1

То, что вы делаете правильно, но если он не работает, это может быть из-за других модулей импорта A или B в их имен и не использует тот же пакет, как то, что вы заделаны.

Я видел это происходит, когда вы делаете что-то вроде этого:

mypackage/ 
    __init__.py 
    mod.py 

модули Python

mypackage/mod.py

class A(object): 
    def get_something(self): 
     return 1 

mypackage/__init__.py

from mod import * 

Тогда mypackage.mod.A может быть импортирован как mypackage.A, но ваше исправление mypackage.mod.A

+0

Нет, я не импортирую его в '__init __. Py'. Но спасибо за предложение – syabro

+1

Добро пожаловать. Рад, что ты это нашел! –

Смежные вопросы