单元测试-Java中的模拟对象是什么?

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

giri asked 2020-08-01T15:44:49Z
5个解决方案
56 votes

模拟对象是用于单元测试的对象。 如果您有一个要测试其方法的对象,并且这些方法依赖于其他对象,则可以创建该依赖关系的模拟,而不是该依赖关系的实际实例。 这使您可以独立测试对象。

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

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

需要注意的一件事是,模拟对象通常与模拟对象实现相同的接口,这使您的代码可以通过接口类型来处理它们,就像它们是真实实例一样。

danben answered 2020-08-01T15:45:19Z
15 votes

模拟和模拟对象并非特定于Java。 模拟对象是单元测试通过模拟的虚拟实现替换代码块的技术真实代码。 这有助于编写针对所提供功能的单元测试由被测类。

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

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

sateesh answered 2020-08-01T15:45:57Z
5 votes

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

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

Kaleb Brasee answered 2020-08-01T15:46:22Z
4 votes

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

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

例如,如果您想测试http调用,则需要创建真实的请求对象,并完整说明其所有依赖项。 这通常可能需要大量的工作,因此使用模拟对象可以为创建所需对象的准确格式提供更快的路径,而无需一连串的依赖关系。

davek answered 2020-08-01T15:46:52Z
1 votes

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

因此是创建它们的测试作者。 您可以将EasyMock用作模拟工具之一。

GuruKulki answered 2020-08-01T15:47:17Z
translate from https://stackoverflow.com:/questions/2128148/what-are-mock-objects-in-java