[英]How to mock up a class variable value in python unit test?
说我有一节课:
class A():
def f(self):
self._v = 1
尝试:
m=Mocker()
A.f._v = m.mock()
...
但没有奏效。 不知道怎么......
你是说Mock图书馆吗?
from mock import Mock
real = ProductionClass()
real.method = Mock(return_value=3)
real.method(3, 4, 5, key='value')
编辑:
你试图在嘲笑之前访问Af_v是不可能的。 不确定你想做什么,但这会奏效
>>>A.f = Mock()
>>>a = A()
>>>a.f._v
<Mock name='mock._v' id='42076240'>
类定义显示了一个实例变量,用于从该类外部设置它,执行以下操作:
class A:
def f(self):
self._v = 1
a = A()
a._v = Mock()
如果你真的想要一个真正的类变量,试试这个:
class A():
_v = None
def f(self):
self.__class__._v = 1
A._v = Mock()
我试过上面的解决方案,它仍然没有解决我的目的,这正是最初的问题。 上面的方法会更新我的类的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()
通过正常执行在ActualClass中运行some_method时,输出:
ActualValue
当您运行TestActualClass时,输出:
Mocked_Name
这意味着使用PropertyType使用模拟值模拟类属性,您可以使用模拟值测试方法,而无需担心外部源方法调用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.