什么是Java中的模拟对象?

gir*_*iri 43 java unit-testing mocking

我想知道Java中的模拟对象是什么.我们为什么要创建它们以及它们的用途是什么?

dan*_*ben 56

Mock对象是用于单元测试的东西.如果您有一个要测试其方法的对象,并且这些方法依赖于某些其他对象,则可以创建依赖项的模拟,而不是该依赖项的实际实例.这允许您单独测试对象.

用于创建模拟对象的常见Java框架包括JMockEasyMock.它们通常允许您创建可以定义其行为的模拟对象,因此当您在模拟对象上调用方法时,您可以确切地知道期望什么(返回值和副作用).

例如,一个常见的用例可能是MVC应用程序,其中有DAO层(数据访问对象)和执行业务逻辑的Controller.如果您想对控制器进行单元测试,并且控制器依赖于DAO,则可以模拟将向控制器返回虚拟对象的DAO.

需要注意的一件事是,通常情况下,模拟对象实现与它们模拟的对象相同的接口 - 这允许您的代码通过接口类型处理它们,就像它们是真实的实例一样.

  • 模拟是英语单词,意思是"模仿"或"模仿".模拟对象模仿您正在测试的对象的依赖关系. (28认同)
  • 嗯,"mock"这个词的意思是"假的".听起来比"假对象"好一点.:) (4认同)
  • 仅仅是为了我自己的利益:"模拟"这个名字来自哪里? (2认同)

sat*_*esh 15

模拟和模拟对象不是特定于Java.模拟对象是一种单元测试技术,其中代码块由模拟实际代码的虚拟实现替换.这有助于编写针对被测试类提供的功能的单元测试.

查看这些文章,它们提供了对
模拟概念的非常好的介绍:模拟对象(PDF)
Endo-Testing:使用模拟对象进行单元测试(PDF)

如果您正在寻找Java中单元测试的模拟框架,请查看: Mockito.我发现它对我的单元测试很有用.


Kal*_*see 5

模拟对象允许您模拟和验证真实对象,而无需在这些对象中实际运行实际代码.您可以设置模拟以返回方法调用的特定结果,您可以验证方法是否被调用,以及其他很酷的东西.

Mockito是一个非常简单直接的Java模拟对象库.