gpt4 book ai didi

Python unittest 模拟补丁对象不是方法

转载 作者:太空宇宙 更新时间:2023-11-03 11:00:51 26 4
gpt4 key购买 nike

我在使用 Python 中的 Mock 进行单元测试时遇到了麻烦。我在要测试的类中有一个方法 start_thing():

class ComplexClass:
def __init__(self, lots, of, args):
self.lots = lots
..

def start_thing(self):
import pdb; pdb.set_trace()
print "some error!!"
assert False

它所属的类非常复杂,并且很难手动尝试和模拟。这就是我开始考虑使用 Mock 的原因。

我想设置一个 mock 来模拟这个类的一个实例,以便于运行单元测试,但不模拟方法 start_thing() 以便真正的 start_thing( ) 实现已经过测试,不是模拟版本..所以我创建了这个:

class TestComplexClass(TestCase):
@patch.object(module.ComplexClass, 'start_thing')
def test_start_thing(self, mock_method):
ComplexClass.start_thing()

当运行我的测试时,在我的真实方法 start_thing() 中没有命中调试跟踪、断言或打印,这表明我已经模拟了类和方法 - 我只想模拟对象并测试真正的方法。我在这里做错了什么?这可能吗?

我发现了很多 Mock 示例,展示了如何创建我想要测试的方法的模拟版本,我认为这有点毫无意义,因为我不想检查它是否被正确调用,而是我想要在真实代码中测试实现,并模拟它所属的类,以便更容易创建。

也许我对整个 Mock 测试想法有一些不理解的地方?

最佳答案

我不认为你想模拟那个类,而是想把它 stub ,例如:

class ComplexClassStub(ComplexClass):
def __init__(self):
self.lots = None
self.the_rest_of_the_args = None # Now your complex class isn't so complex.

class ComplexClassTest(unittest.TestCase):
def Setup(self):
self.helper = ComplexClassStub()

def testStartThing(self):
with mock.patch.object(self.helper, 'SomethingToMock') as something_mocked:
expected = 'Fake value'
actual = self.helper.start_thing()
self.assertEqual(expected, actual)
something_mocked.assert_called_once_with()

关于Python unittest 模拟补丁对象不是方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32684810/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com