模拟对象的目的是什么?

我是单元测试的新手,并且不断听到“模拟对象”一词泛滥的声音。用外行的话,有人可以解释什么是模拟对象,以及在编写单元测试时它们通常用于什么目的?



子衿沉夜
浏览 724回答 3
3回答

GCT1015

Mock对象是Test Double的一种。您正在使用模拟对象来测试和验证被测类与其他类的协议/交互。通常,您会期望“编程”或“记录”期望值:方法调用您希望您的类对基础对象执行的操作。例如,假设我们正在测试一种服务方法来更新Widget中的字段。在您的体系结构中,有一个WidgetDAO可以处理数据库。与数据库的对话很慢,设置和清理之后很复杂,因此我们将模拟WidgetDao。让我们考虑一下服务必须做什么:它应该从数据库中获取一个Widget,对其进行处理,然后再次保存。因此,在带有伪模拟库的伪语言中,我们将具有以下内容:Widget sampleWidget = new Widget();WidgetDao mock = createMock(WidgetDao.class);WidgetService svc = new WidgetService(mock);// record expected calls on the daoexpect(mock.getById(id)).andReturn(sampleWidget);   expect(mock.save(sampleWidget);// turn the dao in replay modereplay(mock);svc.updateWidgetPrice(id,newPrice);verify(mock);    // verify the expected calls were madeassertEquals(newPrice,sampleWidget.getPrice());这样,我们可以轻松测试依赖于其他类的类的驱动开发。
打开App,查看更多内容
随时随地看视频慕课网APP