JUnit是什么

JUnit是一个Java语言单元测试框架


JUnit单元测试的好处

  1. 可以书写一些列的测试方法,对项目的所有的接口或者方法进行单元测试
  2. 启动单元测试后,是自动化的测试
  3. 我们只需要查看最后的结果
  4. 每个单元测试的用例都是相对独立的,由JUnit启动
  5. 添加、删除、屏蔽测试方法

jar包

如果要引入第三方的插件,xxx.jar的文件,首先要把这个文件导入到我们的工程目录下,其次,要添加到工程依赖的目录中


基础运用

import org.junit.Test;

public class Ch01 {

    // test 注解是JUnit提供的一个单元测试注解
    // 如果你的工程没有导入JUnit的jar包,Test注解是不认识的
    @Test
    public void test01() {
        System.out.println("Hello ");
    }

    @Test
    public void test02() {
        System.out.println("Hello 2");
    }
}

关于测试方法

  1. 不能有返回值(方法要为void
  2. 不能有参数
  3. 必须有Test注解

JUnit断言

JUnit所有的断言都包含在Assert类中
这个类提供了很多有用的断言来编写测试用例
只有失败的才会被记录

一些方法

  1. assertEquals:检查两个变量或等式是否平衡
  2. assertTrue:检查条件是否为真
  3. assertFalse:检查条件是否为假
  4. assertNotNull:检查对象是否不为空
  5. assertNull:检查对象是否为空

断言不成功将会抛出异常,即使程序正常运行,但是结果不正确,也会以失败结束。


JUnit注解

  1. Test
  2. Before:在测试方法执行之前,执行的方法
  3. After
命名规范:
单元测试类的命名:被测试类的类名 + Test
测试方法的命名:test + 被测试方法的方法名
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

public class Ch03 {

    @Test
    public void test01() {
        System.out.println("Test01");
    }
    @Test
    public void test02() {
        System.out.println("Test02");
    }

    @Before
    public void testBefore() {
        System.out.println("before");
    }

    @After
    public void testAfter() {
        System.out.println("after");
    }
}
输出结果:
before Test01 after before Test02 after

一些简单的测试

代码部分

public class Ch04 {

    /**
     * 尝试开辟50个线程
     * 每个线程向集合中put 100,000 个元素
     * 测试两个类所需的时间
     */
    @Test
    public void hashtableTest() throws InterruptedException {
        final Map<Integer, Integer> map = new Hashtable<>(500000);
        // 计数器
        final CountDownLatch countDownLatch = new CountDownLatch(50);
        long start = System.currentTimeMillis();

        System.out.println("开始测试hashtable=-=-=-=-=-=-=-=-=-=");
        for (int i = 0; i < 50; i++) {
            final int j=i;
            new Thread(() -> {
                for (int k = 0; k < 100000; k++) {
                    map.put(j*k,1);
                }
                // 记录添加数据的次数
//                countDownLatch.countDown();
            }).start();
        }
//        countDownLatch.await();
        long end = System.currentTimeMillis();
        System.out.println("hashtable执行了:" + (end-start));

    }

    @Test
    public void testConcurrentHashMap() throws InterruptedException {
        final Map<Integer, Integer> map = new ConcurrentHashMap<>(500000);
        // 计数器
        final CountDownLatch countDownLatch = new CountDownLatch(50);
        long start = System.currentTimeMillis();

        System.out.println("开始测试ConcurrentHashMap=-=-=-=-=-=-=-=-=-=");
        for (int i = 0; i < 50; i++) {
            final int j=i;
            new Thread(() -> {
                for (int k = 0; k < 100000; k++) {
                    map.put(j*k,1);
                }
                // 记录添加数据的次数
//                countDownLatch.countDown();
            }).start();
        }
//        countDownLatch.await();
        long end = System.currentTimeMillis();
        System.out.println("hashtable执行了:" + (end-start));

    }

    @Test
    public void testArrayList() {
        List<Integer> list = new ArrayList<>();


        for (int i = 0; i < 10000000; i++) {
            list.add((int) (Math.random() * 100));
        }
        long start = System.currentTimeMillis();

//        for (int i = 0; i < list.size(); i++) {
//            list.get(i);
//        }
        Iterator<Integer> iterator = list.iterator();
        while (iterator.hasNext()) {
            iterator.next();
        }
        long end = System.currentTimeMillis();

        System.out.println("arraylist用时:"+(end-start));
    }

    @Test
    public void testLinkedList() {
        List<Integer> list = new LinkedList<>();


        for (int i = 0; i < 10000000; i++) {
            list.add((int) (Math.random() * 100));
        }
        long start = System.currentTimeMillis();

//        for (int i = 0; i < list.size(); i++) {
//            list.get(i);
//        }
        Iterator<Integer> iterator = list.iterator();
        while (iterator.hasNext()) {
            iterator.next();
        }
        long end = System.currentTimeMillis();

        System.out.println("linkedlist用时:"+(end-start));
    }

    @Before
    public void before() {

    }
}

ArrayList和LinkedList性能测试

  1. 尾插 数组快,链表慢
  2. 遍历 数组快,链表慢
  3. 头插 数组慢,链表快
  4. 随机删除,如果要过滤,建议用链表(LinkedList)

不要只因一次挫败,就放弃你原来决心想达到的目的。 ——莎士比亚《哈姆雷特》
最后修改:2023 年 01 月 09 日
如果觉得我的文章对你有用,请随意赞赏