为了账号安全,请及时绑定邮箱和手机立即绑定

模拟对象的目的是什么?

模拟对象的目的是什么?

子衿沉夜 2019-10-23 12:55:13
我是单元测试的新手,并且不断听到“模拟对象”一词泛滥的声音。用外行的话,有人可以解释什么是模拟对象,以及在编写单元测试时它们通常用于什么目的?
查看完整描述

3 回答

?
GCT1015

TA贡献1827条经验 获得超4个赞

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 dao

expect(mock.getById(id)).andReturn(sampleWidget);   

expect(mock.save(sampleWidget);


// turn the dao in replay mode

replay(mock);


svc.updateWidgetPrice(id,newPrice);


verify(mock);    // verify the expected calls were made

assertEquals(newPrice,sampleWidget.getPrice());

这样,我们可以轻松测试依赖于其他类的类的驱动开发。


查看完整回答
反对 回复 2019-10-23
  • 3 回答
  • 0 关注
  • 718 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信