我为什么要使用模拟对象(Java)?所有模拟框架都有同样的目的吗?

3 java unit-testing mocking

可能重复:
模拟对象的目的是什么?

我正在准备一个演示文稿,我需要更好地了解模拟是什么,使用它的目的是什么,我应该使用模拟对象的常见情况是什么?我发现那里有一堆模拟框架.他们都做同样的事情,还是使用特定的框架进行特定的测试?这些框架之间有什么区别?你会推荐哪一个用于测试Java?

这里有一些我发现的东西:

1. MockingToolkitComparisonMatrix似乎有偏见.

2. Java中的模拟对象是什么?这是一岁.我想今天可能会有更好的答案.

谢谢.

hvg*_*des 6

模拟的目的是允许您单独测试应用程序组件.例如,如果您有一个使用DAO的服务,您希望能够在不必通过DAO转到数据库的情况下测试您的服务.你会

1)
单独测试DAO ,2)在服务测试中模拟DAO,这样您的服务就可以单独测试.

由于您的DAO具有明确定义的API,因此您的模拟DAO会模拟该API.因此,如果您有一个findAll服务调用的类型方法,您可以轻松地模拟DAO以期望调用findAll并返回适当的结果.

所有模拟框架的目的都是相同的 - 允许您设置期望并断言在测试中满足这些期望.但是,框架之间的细节是不同的.我在实际工作环境中使用过EasyMock,并与Mockito一起玩回答关于SO的几个问题.两者都很不错.进入成本相当低 - 这个想法始终是设定期望,让模拟返回结果,然后验证期望是否得到满足.您可能需要花一天或两天才能理解您的模拟框架,但在此之后您应该能够高效工作并找出您不知道的内容.


nsf*_*n55 5

在良好的封装设计中,无论其依赖项的实现类如何,类都应该表现相同.Mocking允许您隔离您的实现代码,以便您可以检查它将如何独立于更多不稳定的构造(如数据库和文件系统)以确保确定性结果的方式做出反应.