在Mockito中正在为模拟类调用什么构造函数(如果有)?

Joh*_*han 2 java mocking mockito

在测试类中,当我们指示mockito提供一些模拟对象(用标记这样的属性字段@Mock)(例如,将其注入@InjectMocks属性字段)时,创建每个模拟对象遵循的规则是什么?

进一步来说:

1)每个模拟是如何构建的?

2)如何处理每个模拟的依赖关系?模拟时应考虑哪些规则和限制?

3)“模拟的类A依赖于类B,而类B又被模拟(在同一测试类中)”的情况与“模拟的A类依赖于类B而类B不被模拟”的情况不同吗?

Gho*_*ica 5

模拟的想法与您的问题所暗示的完全相反:模拟不是通过调用构造函数来调用。这就是模拟的全部思想:它们与您的生产代码无关

换句话说:您要求一个A.class的模拟对象;您将获得一个支持A.class方法的对象。从这个意义上讲,模拟的A对象没有任何依赖关系。

要知道,这就是重点:如果模拟的A与真实的A相同,则为假。嘲笑是什么意思?

  • 这个想法是:为了测试生产代码,当您调用一种方法来测试某些东西时,您*可能*必须控制“被测类”将使用的字段(或参数)。当您需要控制事物时,通常会转向模拟。但是,假设您要测试foo方法,该方法只计算直接传递给foo的某些映射的以“ A”开头的键的数量。在这种情况下,您不需要模拟。相反,您*想要*在此处传递真实地图-您之前已对其进行了仔细初始化。所以答案:这取决于。并认真地:**阅读**有关此内容的教程。 (2认同)
  • 如:stackoverflow是**不是**编程学校,其他人**教您“完整的方法”。您真的不应该涉足“除此之外,请告诉我这一点以及那是如何工作的”……我们可以帮助您解决特定问题;而不是“我不了解整个概念”。 (2认同)