我想知道 Java 中的 mock objects 是什么。我们为什么要创建它们以及它们的用途是什么?
Mock 对象是用于单元测试的东西。如果您有一个要测试其方法的对象,并且这些方法依赖于其他某个对象,那么您将创建依赖项的模拟而不是该依赖项的实际实例。这允许您单独测试您的对象。
用于创建模拟对象的常见 Java 框架包括 JMock 和 EasyMock。它们通常允许您创建可以定义其行为的模拟对象,因此您确切地知道在模拟对象上调用方法时会发生什么(就返回值和副作用而言)。
例如,一个常见的用例可能是在 MVC 应用程序中,其中您有一个 DAO 层(数据访问对象)和一个执行业务逻辑的控制器。如果你想对控制器进行单元测试,并且控制器依赖于 DAO,你可以模拟 DAO,它将虚拟对象返回给你的控制器。
需要注意的一件事是,模拟对象通常实现与它们模拟的对象相同的接口——这允许您的代码通过接口类型处理它们,就好像它们是真实事物的实例一样.
模拟和模拟对象不是 Java 特有的。模拟对象是一个单元测试 将代码块替换为模拟虚拟实现的技术 真正的代码。这有助于编写针对所提供功能的单元测试 由被测类。
查看这些文章,它们很好地介绍了模拟的概念:
模拟对象 (PDF)
Endo-Testing:使用模拟对象进行单元测试 (PDF)
如果您正在寻找用于 Java 单元测试的模拟框架, 看看:Mockito。 我发现它对我的单元测试很有用。
Mock 对象让您模拟和验证真实对象,而无需在这些对象中实际运行真实代码。你可以设置一个模拟来返回方法调用的特定结果,你可以验证一个方法是否被调用,以及其他很酷的东西。
Mockito 是一个非常简单明了的 Java 模拟对象库。
引自此处:http://easymock.org/
单元测试是测试 孤立的软件单元。然而, 大多数单位不单独工作,但他们 与其他单位合作。去测试 一个孤立的单位,我们必须 模拟协作者 测试。模拟对象是面向测试的 替代合作者。这是 配置为模拟对象 它以简单的方式替换。
例如,如果您想测试 http 调用,您将需要创建真实的请求对象,并完成所有依赖项。这通常需要付出很多努力,因此使用模拟对象可以更快地创建所需对象的准确再现,而无需长链依赖关系。
模拟对象是用于单元测试的对象。这可以帮助您测试您想要测试的唯一功能。因为所有的依赖都可以通过模拟那些依赖对象来实现。因此,如果测试通过,您将确定您的被测单元是正确的。
所以是创建它们的测试作者。您可以使用 EasyMock 作为 Mocking 的工具之一。
假设 Ramesh 和 Suresh 正在从事一个项目。 Ramesh 正在开发一种方法来保存客户详细信息,而 Suresh 正在开发另一种方法,该方法将验证数据库中是否存在客户,如果它不存在,那么它只会返回 false,然后只保存客户。
所以这里的 save 方法取决于 isExist 方法的输出,如果你想测试 save 方法,那么你需要有 isExist 方法的对象,但问题是 isExist 方法没有完全开发那么你将如何测试。
然后您将创建该类的模拟对象,其中包含 isExist 方法,然后您将能够测试您的保存方法。
所以我们可以说 Mock 对象是任何类的伪对象,它可以帮助您运行单元的测试用例。
因此我们不会创建真实的对象,而是创建模拟对象来测试任何方法。