JUnit是一个Java语言的单元测试框架。它由Kent Beck和Erich Gamma建立,逐渐成为源于Kent Beck的sUnit的xUnit家族中最为成功的一个。 JUnit有它自己的JUnit扩展生态圈。多数Java的开发环境都已经集成了JUnit作为单元测试的工具。
JUnit是由Erich Gamma 和 Kent Beck 编写的一个回归测试框架。JUnit测试是程序员测试,即所谓白盒测试,因为程序员知道被测试的软件如何完成功能和完成什么样的功能。JUnit是一套框架,继承TestCase类,就可以用JUnit进行自动测试了。
JUnit测试类似于c语言中的调试,只不过那个调试是通过设置断点分隔代码来进行测试;而java中的JUnit则是通过分开测试不同的类和方法实现的。

优点:

极限编程:要求在编写代码前先写测试,这样可以强制你在写代码之前好好思考代码的功能与逻辑,否则编写的代码很不稳定,也通俗的叫在写代码前自己想想你这个方法根据参数想得到的结果是什么? 也可以认为是从结果出发,所以很锻炼你的思维,让你养成极限的思维:构思->编写测试代码->编写代码->测试。而且可以很快的找到问题的原因,不怕以后忙起来忘了这里原来是怎么测试的,并进行重复繁琐的测试工作。
重构:这个也是改一点测一点,减少回归错误造成的时间消耗,就算重构也不会影响你这个犯法返回的结果什么,重构只是让代码更加简洁,更加易懂,得到的结果如果改变,就不叫重构了。
自动化:以前我们自己测试要debug打断点或者输出结果看看,这样增加了自己的工作量,影响我们的效率,尤其是对于复用的方法,如果里面的逻辑变了,是否会得到我们想要的结果。而junit就帮我们全部做了,它有断言功能,Assert来对结果进行比较,是否符合自己的预期,非常方便。比如java肯定要面向接口编程,那一个接口服务就可以做一个单元测试,当服务里面的逻辑更改后,只需要动动鼠标就知道自己的这个服务是否能得到自己想要的结果
隔离性:这个就需要我们自己去设置,一般推荐测试用例不要是历史数据,因为一旦丢失,单元测试就会失败。需要注意的是单元测试类的单元测试方法之间是互不干扰的,而且执行顺序是不可预测的,不要想着先执行这个单元测试,留下结果给下一个单元测试,这是非常不对的。

缺点:
最初的设计,使用于单元测试,现在只用于各种测试
不能依赖测试
配置控制欠佳(安装/拆卸)
侵入性(强制扩展类,并以某种方式命名方法)
静态编程模型(不必要的重新编译)
不同的适合管理复杂项目中的测试可以是非常棘手.