Я пробовал вышеупомянутые решения, и это все еще не решает мою цель, которая является точно тем, что спрашивают первоначально. Приведенный выше подход обновит атрибут mocked моего класса, чтобы он имел значение.
Мое требование состоит в том, чтобы установить значение атрибута из проверенного значения, которое я предоставляю в своем классе модульного теста.
Я мог бы наконец решить это с помощью следующего подхода. Дайте мне знать, если это не правильный путь:
Фактический класс:
class ActualClass(object):
name=''
def some_method(self):
name=get_name_from_external_source() #Say, returned name='ActualValue'
print name
Класс модульных испытаний:
from mock import PropertyMock
import unittest
class TestActualClass(unittest.TestCase):
def test_some_method(self):
actual_class=ActualClass()
p=PropertyMock(return_value='Mocked_Name')
type(actual_class).name=p
actual_class.some_method()
Когда вы запускаете some_method в ActualClass при обычном выполнении, вывод:
ActualValue
Когда вы запускаете TestActualClass, вывод:
Mocked_Name
Это подразумевает, что атрибуты класса макетируются с помощью фиктивного значения с помощью PropertyType, и вы можете протестировать метод с помощью фиктивного значения, не беспокоясь о вызове метода внешнего источника.