Q:Junit是什么?
JUnit是一个Java语言的单元测试框架。它由Kent Beck和Erich Gamma建立,逐渐成为源于Kent Beck的sUnit的xUnit家族中最为成功的一个。 JUnit有它自己的JUnit扩展生态圈。多数Java的开发环境都已经集成了JUnit作为单元测试的工具。[1-2]
JUnit是由 Erich Gamma 和 Kent Beck 编写的一个回归测试框架(regression testing framework)。Junit测试是程序员测试,即所谓白盒测试,因为程序员知道被测试的软件如何(How)完成功能和完成什么样(What)的功能。Junit是一套框架,继承TestCase类,就可以用Junit进行自动测试了。
通俗的话来说,Junit可以指定运行整个程序的局部代码运行。
单元测试的意义何在?
①功能是通过许多单元模块实现的,一个单元模块出错很可能会导致所有依赖该模块的功能出错,因功能与单元模块依赖关系导致的错误扩散速度是十分惊人的。软件开发时,一个错误发现的越晚,为改正它所付出的代价,单元测试则是想尽可能早地发现错误。
②证明你自己的模块没有错,担责甩锅的话不觉得这很重要吗?
③”优秀”程序员的强迫症—就好像汽车厂生产汽车了不进行碰撞试验你能忍?
Q:Junit jar下载/所需依赖
Maven依赖声明示例
pom.xml
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
Q:Junit4的使用
Tip:
Junit 早期和Junit4的使用方法有较大出入,本文仅示范Junit 4.X版本
Junit4 常见注解:
@Before:在当前测试类每个测试方法前执行
@After:在当前测试类每个测试方法后执行
@Test:标识标记下方为测试方法
@Ignore:忽略的测试方法
@BeforeClass:在当前测试类所有测试方法前执行一次,且必须为static void
@AfterClass:在当前测试类所有测试方法后执行一次,且必须为static void
执行顺序举个栗子:
测试类 A中 有
@BeforeClass @AfterClass
测试类B中 有
@BeforeClass @AfterClass @Before @After @Test
(不推荐继承写法,虽然博主也不知道具体原因)
测试类B继承测试类A
运行测试类B 执行顺序如下 ↓
A的@BeforeClass方法
B的@BeforeClass方法
B的@Before方法
B的@Test方法
B的@After方法
B的@AfterClass方法
A的@AfterClass方法
个人认为这些说明已经十分明确了,简单的示例就不仔细演示了,细节顺序你们可以自己试
标记使用示例:
import com.xavier.Test2;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import static org.junit.Assert.*;
/**
* 描述信息:<br/>
*
* @author Xavier on 16/12/13.
* @version 1.0
* @since jdk 1.8
*/
public class Test2Test {
@Before
public void winit() {
System.out.println(">>>>>>test2 Every");
}
@After
public void wtheEnd() {
System.out.println("<<<<<<test2 Every");
System.out.println();
}
@Test
public void method1() throws Exception {
new Test2().method1();
}
@Test
public void method2() throws Exception {
new Test2().method2();
}
@Test
public void method3() throws Exception {
new Test2().method3();
}
}
多个测试类共用某资源的解决方案:
import com.xavier.PublicResource;
import com.xavier.Test1;
import com.xavier.Test2;
import org.junit.ClassRule;
import org.junit.rules.ExternalResource;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.springframework.test.context.junit4.SpringRunner;
import static org.junit.Assert.*;
/**
* 描述信息:<br/>
*
* @author Xavier on 16/12/13.
* @version 1.0
* @since jdk 1.8
*/
@RunWith(Suite.class)
@Suite.SuiteClasses({Test1Test.class, Test2Test.class})// 此处为配置为执行一次测试,测试Test1Test.class、Test2Test.class两个测试类
public class TestAll {
public static PublicResource publicResource = new PublicResource();// 被多个测试类公用的某资源
@ClassRule
public static ExternalResource resource = new ExternalResource() {
@Override
protected void before() throws Throwable {
publicResource.getResource();//多个测试类所有测试方法执行前会执行的代码
}
@Override
protected void after() {
publicResource.cleanResource();//多个测试类所有测试方法执行完成后会执行的代码
}
};
}
运行TestAll测试类
运行结果
Q:官方文档
传送门:Junit GitHub 文档