什么是Java中的模拟对象?

时间:2010-01-24 18:20:05

标签: java unit-testing mocking

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

5 个答案:

答案 0 :(得分:54)

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

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

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

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

答案 1 :(得分:15)

Mocking和Mock对象并不特定于Java。模拟对象是一个单元测试 代码块由模拟的虚拟实现替换的技术 真实的代码。这有助于编写针对所提供功能的单元测试 被测试的班级。

查看这些文章,它们非常好地介绍了模拟的概念:
Mock Objects(PDF)
Endo-Testing: Unit Testing with Mock Objects(PDF)

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

答案 2 :(得分:5)

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

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

答案 3 :(得分:4)

从这里引用:http://easymock.org/

  

单元测试是测试   单独的软件单元。然而,   大多数单位不是单独工作,而是他们   与其他单位合作。去测试   我们必须孤立一个单位   模拟合作者   测试。模拟对象是面向测试的   替换合作者。它是   配置为模拟对象   它以一种简单的方式取代。

例如,如果您想要测试http调用,则需要创建真实的请求对象,并完成所有依赖项。这通常需要付出很多努力,因此使用模拟对象可以提供更快的路径来创建所需对象的准确再现,而不需要长链依赖。

答案 4 :(得分:1)

模拟对象是单元测试中使用的对象。它可以帮助您测试您想要测试的唯一功能。因为可以通过模拟那些依赖对象来实现所有依赖关系。因此,如果测试通过,您将确保您的被测单位是正确的。

所以它是创建它们的测试作者。您可以将EasyMock用作Mocking的工具之一。

相关问题