idea创建测试Junit单元和入门简单了解

idea创建测试单元步骤


目录顺序 Junit4的使用

测试分类:

  1. 黑盒测试(看不到代码不关心具体实现逻辑,只看见input和output,看程序输出结果的值)
  2. 白盒测试(不同的是,看到代码考量算法性能,看到具体的流程)junit就是白盒

下载jar

在github上,把以下两个jar包都下载下来。下载地址:点击打开链接
下载junit-4.12.jar,junit-4.12-javadoc.jar(文档),junit-4.12-sources.jar(源码)
第一个在这里下载
下载hamcrest-core-1.3.jar,hamcrest-core-1.3-javadoc.jar(文档),hamcrest-core-1.3-sources.jar(源码)。
第二个这里下载


上面不推荐用下面的

这样手工并不快速我们可以通过maven的方法自动导入更快

  • 在pom.xml中添加下面代码,然后点击自动导入
	<dependencies>
        	<dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
       	 </dependency>
    </dependencies>
    
  • 把这个test文件夹要设置成测试文件的根目录,右键选中 Mark Directory As - Test Sources Root
  • 然后出现了一个黄色灯泡,create new

假设写两个类


public class Math {
    public int facional(int n) throws Exception {

        if( n < 0 ) {
            throw new Exception("负数没有阶乘");
        }else if(n <= 1){
            return  1;
        }else {
            return n*facional(n-1);
        }
    }
}




import org.junit.Before;
import org.junit.Test;

import static org.junit.Assert.assertEquals;
import static org.junit.jupiter.api.Assertions.*;

class MathTest {
    @Test
    public void facional() throws Exception{
        assertEquals(120,new Math().facional(5));
    }
}

运行: run MathTest 。右下方一条绿色条说明测试通过,如果把120改成别的数字那么就会测试不通过显色红色条。JUnit4有一句话叫:“keeps the bar green to keep the code clean”。

    解释一下MathTest,就六个地方要讲:
              第一,导入了org.junit.Test;和org.junit.Assert.*;这两个包,注意后者是静态导入import static。
              第二,testFactorial是在要测试的方法名Factorial前加个test(这也是个好习惯)。
              第三,所有测试方法返回类型必须为void且无参数。
              第四,一个测试方法之所以是个测试方法是因为@Test这个注解。
              第五,assertEquals的作用是判断两个参数是否相等,例子中120是预期结果,new Math().factorial(5)是实际结果。但是通常不应该只比较一个值,要测试多几个特殊值,特别是临界值

执行顺序

几个常用的注解:

  • @Test:把方法标记为测试方法
  • @Before:每一个测试方法执行前自动调用一次,用于资源申请
  • @After:每一个测试方法执行完自动调用一次,资源释放方法
  • @BeforeClass:所有测试方法执行前执行一次,在测试类还没有实例化就已经被加载,所以用static修饰
  • AfterClass:所有测试方法执行完执行一次,在测试类还没有实例化就已经被加载,所以用static修饰
  • @Ignore:暂不执行该测试方法

代码样列

package com.xuhongchuan.util;
 
import org.junit.*;
import static org.junit.Assert.*;
 
/**
 * Created by xuhongchuan on 2015/7/18.
 */
public class AnnotationTest {
 
    public AnnotationTest() {
        System.out.println("构造方法");
    }
 
    @BeforeClass
    public static void setUpBeforeClass() {
        System.out.println("BeforeClass");
    }
 
    @AfterClass
    public static void tearDownAfterClass() {
        System.out.println("AfterClass");
    }
 
    @Before
    public void setUp() {
        System.out.println("Before");
    }
 
    @After
    public void tearDown() {
        System.out.println("After");
    }
 
    @Test
    public void test1() {
        System.out.println("test1");
    }
 
    @Test
    public void test2() {
        System.out.println("test2");
    }
 
    @Ignore
    public void test3() {
        System.out.println("test3");
    }
 
}

实验结果:
构造方法
Before
test1
After
构造方法
Before
test2
After
AfterClass

@BeforeClass和@AfterClass在类被实例化前(构造方法执行前)就被调用了,而且只执行一次,通常用来初始化和关闭资源。@Before和@After和在每个@Test执行前后都会被执行一次。@Test标记一个方法为测试方法没什么好说的,被@Ignore标记的测试方法不会被执行,例如这个模块还没完成或者现在想测试别的不想测试这一块。
以上有一个问题,构造方法居然被执行了两次。所以我这里要说明一下,JUnit4为了保证每个测试方法都是单元测试,是独立的互不影响。所以每个测试方法执行前都会重新实例化测试类。

步骤:

  1. 定义一个测试类
  2. 定义测试方法:可以独立运行,建议返回值void,参数列表空参
  3. 给方法加注解@Test,出现错误在这里插入图片描述
  4. 导入junit的依赖,解决问题
  5. 断言找bug
    在这里插入图片描述
  6. 判定结果红色失败,绿色成功
发布了38 篇原创文章 · 获赞 1 · 访问量 2269

猜你喜欢

转载自blog.csdn.net/CRD8843/article/details/103637595