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

时间:2016-08-03 15:26:03

标签: unit-testing testing junit mocking mockito

我想知道Mockito是什么?

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

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

3 个答案:

答案 0 :(得分:24)

JUnit是一个有助于编写和运行单元测试的框架。

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

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

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

答案 1 :(得分:7)

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

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

答案 2 :(得分:0)

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

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

我们可能在项目中使用许多数据类。例如,以一个Student对象为例,它可能有大约10个参数,例如id,age,marks,gender e.t.c.但是您有一个API可以返回年龄大于10岁的学生列表。因此,要测试此API,我们需要创建所有10个参数正确的Student对象。很难。因此,我们只能使用必需的参数来模拟对象。在我们的场景中,我们将仅以年龄为参数模拟学生obj。

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

Student student2=mock(Student.class);
when(student2.getAge()).thenReturn(8);

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