MOCKITO:它是什么,它和Junit有什么不同?

Ran*_*dom 37 testing junit unit-testing mocking mockito

我想知道Mockito是什么?

它是支持Junit还是编写Junit测试用例的环境?

有人可以解释一下Junit和Mockito之间的区别吗?

Gho*_*ica 31

JUnit是一个框架,可以帮助编写和运行单元测试.

Mockito(或任何其他模拟工具)是您专门用于有效编写某种测试的框架.

单元测试的一个核心方面是,您希望将"被测试的课程"与世界上任何其他课程隔离开来.为了做到这一点,你经常需要创建"测试双打",你提供给"被测试的类"的对象.你可以手动创建所有那些"测试双打"; 或者你使用一个模拟框架,使用反射技术为你生成某个类的对象.有趣的是,有些人主张永远不要使用模拟框架; 但老实说:我无法想象这样做.

换句话说:你绝对可以在不使用模拟框架的情况下使用JUnit.反方向也是如此; 但实际上,除了单元测试之外,你想要将Mockito用于其他任何事情的原因并不是很多.

  • 首先要明白的是:这些是**不同的**产品.除了你通常一起使用它们之外,所有这些"事物"都是相互独立的.因此,不要互相包含.但实际上:这不是你应该问的问题:转到每个产品的主页; 并阅读他们的文件.不要依赖人们向你解释明显记录的东西. (5认同)
  • 我是提倡避免使用模拟库的人之一(即使我自己开发了一个!)。经过多年的经验,我意识到这通常会导致测试失败。人们倾向于过度使用/滥用/滥用模拟工具。相反,我更喜欢集成测试。有趣的是,著名的“大师”(包括TDD的“创建者”)也不喜欢嘲笑。他们编写了*非隔离的*单元测试-供参考,请参阅[本文](http://martinfowler.com/bliki/UnitTest.html)。 (2认同)

Tar*_*n A 13

外行人的解释与示例

JUnit 用于测试源代码中的 API。为了在 JUnit 中测试 API,有时我们可能需要数据类。为了创建它们,我们可以使用mockito。

模拟是指创建重复或虚拟对象。

我们可能在项目中使用许多数据类。例如,考虑一个 Student 对象。它可能有大约 10 个参数,如 id、年龄、分数、性别等。但是您有一个 API 可以返回年龄大于 10 的学生列表。因此,为了测试此 API,我们需要创建包含所有 10 个参数的学生对象正确的。这很难。因此,我们只能使用所需的参数来模拟对象。在我们的场景中,我们将仅使用年龄作为参数来模拟学生对象。

Student student1=mock(Student.class);
when(student1.getAge()).thenReturn(20);

Student student2=mock(Student.class);
when(student2.getAge()).thenReturn(8);
Run Code Online (Sandbox Code Playgroud)

因此,以上 2 个对象可以添加到列表中,并可以传递给 API 来测试 API 是否返回年龄大于 10 的学生。


小智 7

JUnit是用于编写测试的Java库(提供对运行测试和不同额外帮助程序的支持 - 如设置和拆卸方法,测试集等).是的Mockito使使用编写测试库嘲讽的做法.

在这里看一篇关于模拟与非模拟测试的好文章:http://martinfowler.com/articles/mocksArentStubs.html