我有一些python类
Class A(object):
def __init__(self, dep1, dep2, *args, **kwargs):
self.prop1 = dep1
self.prop2 = dep2
def method1(self):
self.prop3 = self.prop1.make_action()
return
我需要从A级测试A.method1。 我就是这样做的:
import pytest
import mock
def test__method1():
"""Ensure prop3 has been set from a.prop1.make_action() returned value"""
a = mock.MagicMock(spec=A)
a.prop1 = mock.Mock()
a.prop2 = mock.Mock()
a.prop1.make_action.return_value = "val1"
A.method1(a)
assert a.prop1.make_action.call_count == 1
assert a.prop3 == "val1"
这是进行像这样的测试的最好方法,还是我做错了什么? 添加: 首先,我尝试像这样调用method1:
a.method1 = A.method1
a.method1()
但它没有用。
现在我还需要明确地模拟 a.prop1 和 a.prop2 。但在某些情况下,如果我没有设置 spec 属性,我不需要模拟prop1和prop2,它们已经在这里了。这些是我提出这个问题的原因
答案 0 :(得分:0)
现在我这样做:
@pytest.fixture
def instance_of_a():
a = mock.Mock(A)
a.prop1 = mock.Mock()
a.prop2 = mock.Mock()
a.prop1.make_action.return_value = "val1"
return a
def test__a_method1(instance_of_a):
A.method1(instance_of_a)
assert instance_of_a.prop1.call_count == 1
assert instance_of_a.prop3 == "val1"