2022-8-8第八组---JUnit单元测试、File类

今日重点:

目录

一、JUnit单元测试

1、概念

2、JUnit单元测试的好处

3、jar包

4、JUnit单元测试的使用(测试)方法

要求:

(1)不能有返回值

(2)不能有参数列表

(3)必须有Test注解

5、JUnit断言

常用方法

6、JUnit注解

(1) Test注解

(2) Before

(3)After

7、JUnit命名规范

(1)单元测试类的命名

(2)测试方法的命名

二、集合的面试题

1、Hashtable和ConcurrentHashMap性能测试

2、ArrayList和LinkedList性能测试

  (1)按顺序添加元素效率

(2)查询效率 

(3)删除效率

3、测试结果总结

三、Stream流式编程

1、概念

2、使用流的三个步骤

3、Stream的特性

四、Stream流式编程使用示例

1、创建流的几种常见方式

(1)用集合方式创建流

(2)用到静态方法创建流(做个了解即可)

2、具体案例(具体能干什么)

(1)创建一个person类

(2)测试类Ch06

3、具体案例分段解析其使用方法

(1)打印集合元素

(2)查找元素

(3)判断元素

(4)收集元素

(5)统计

(6)归约(reduce)缩减

(7)分组

(8)筛选

(9)映射

(10)排序---sorted

五、JDK8函数式接口

1、Consumer

 2、 Supplier

 3、Function

 4、Predicate

六、 JDK8新增接口

 1.函数式接口 2.箭头函数(lambda表达式),不是java特有的。 3.Optional类 4.断言 5.Stream编程

七、Java---IO 流

1、概念

2、Input、Output

 (1)本地传输:

 (2)网络传输:

 (3) 对象传输:

3、工具类:File操作文件的类

 (1)文件的路径

 (2)File类的构造器

八、文件的操作 

1、创建文件

2、删除文件

3、创建和删除文件夹

4、创建文件夹以及此文件夹下的文件

5、其他常见命令


一、JUnit单元测试

1、概念

JUnit是一个Java语言单元测试框架。JUnit 在测试驱动的开发方面有很重要的发展,是起源于 JUnit 的一个统称为 xUnit 的单元测试框架之一。
 

2、JUnit单元测试的好处

(1)可以书写一些列的测试方法,对项目的所有的(数据)接口或者方法进行单元测试。
(2)启动后,自动化的测试,并且判断执行结果,不需要人为的干预。
(3)只需要查看最后的结果,就可以知道整个项目的方法接口是否通畅。
(4)每个单元测试用例相对独立,由JUnit启动,自动调用,不需要添加额外的调用语句。
(5)添加,删除,屏蔽测试方法,不影响其他的测试方法,开源框架都对JUnit有相应的支持。

3、jar包

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

比如要使用@Test注解

如果工程中没有导入jar包,程序是不认识@Test注解的。

4、JUnit单元测试的使用(测试)方法

要求:

(1)不能有返回值

(2)不能有参数列表

(3)必须有Test注解

package com.jsoft.morning;

import org.junit.Test;

public class Ch01 {

    @Test
    public void test01(){
        System.out.println("hello junit01");
    }

    @Test
    public void test02() {
        System.out.println("hello junit02");
    }
}

以前一个类中我们只有一个主方法可以运行,现在通过JUnit测试方法,两个方法都可以运行了,再写多个方法也是可以的 。

5、JUnit断言

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

JDK1.8新出的功能,用来测试程序功能好不好使的的功能, JUnit断言提供了一些辅助函数,用于帮助开发人员确定某些被测试函数是否工作正常,断言是单元测试最基本的组成部分。JUnit的所有断言都包含在Assert类中,这个类提供了很多有用的断言来编写测试用例,只有失败的断言才会被记录。Assert 类中的一些有用的方法列式如下:

常用方法

① assertEquals:

检查两个变量或等式是否平衡
② assertTrue:

检查条件是否为真


③ assertFalse:

检查条件是否为假
④ assertNotNull:

检查对象是否不为空
⑤ assertNull:

检查对象是否为空

6、JUnit注解

(1) Test注解

这个注释说明依附在 JUnit 的 public void 方法可以作为一个测试案例。

(2) Before

有些测试在运行前需要创造几个相似的对象。在 public void 方法加该注释是因为该方法需要在 test 方法前运行。

(3)After

如果你将外部资源在 Before 方法中分配,那么你需要在测试运行后释放他们。在 public void 方法加该注释是因为该方法需要在 test 方法后运行。

package com.jr.morning;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
/*
JUnit注解
1.Test
2.Before
3.After

 */
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("testBefore方法执行。。。");
    }
    @After
    public void testAfter(){
        System.out.println("testBefore方法执行。。。");
    }
}

7、JUnit命名规范

(1)单元测试类的命名

被测试类的类名 + Test

(2)测试方法的命名

test + 被测试方法的方法名
 

JUnit测试方法参考文章:https://www.jianshu.com/p/a3fa5d208c93

二、集合的面试题

我们尝试开辟50个线程,每个线程向集合中put 100000个元素,测试两个类所需的时间

1、Hashtable和ConcurrentHashMap性能测试

package com.jr.morning;

import org.junit.Test;

import java.util.Hashtable;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CountDownLatch;

/*
集合的好多面试
1. Hashtable和ConcurrentHashMap性能测试

 */
public class Ch04 {

    /* 我们尝试开辟50个线程,每个线程向集合中put100000个元素,
       测试两个类所需的时间
    */
    @Test
    public void hashtableTest() throws InterruptedException {
        final Map<Integer, Integer> map = new Hashtable<>(500000);
        System.out.println("开始测试hashtable-----------------------");
        long start = System.currentTimeMillis();
        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);
                }

            }).start();
        }
        long end = System.currentTimeMillis();
        System.out.println("hashtable执行了:" + (end - start));
    }
    @Test
    public void testConcurrentHashMap() throws InterruptedException {
        final Map<Integer,Integer> map = new ConcurrentHashMap<>(500000);
        System.out.println("开始测试ConcurrentHashMap-----------------------");
        long start = System.currentTimeMillis();
        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);
                }
            }).start();
        }
        long end = System.currentTimeMillis();
        System.out.println("ConcurrentHashMap执行了:" + (end - start)); // 71ms
    }

}

2、ArrayList和LinkedList性能测试

(1)按顺序添加元素效率

package com.jr.morning;

import org.junit.Test;

import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CountDownLatch;

/*
集合的好多面试
1. Hashtable和ConcurrentHashMap性能测试

 */
public class Ch04 {
    @Test
    public void testArrayList() {
        List<Integer> list = new ArrayList<>();
        long start = System.currentTimeMillis();
        for (int i = 0; i < 10000000; i++) {
            list.add((int)Math.random()*100);
        }
        long end = System.currentTimeMillis();
        System.out.println("arraylist用时:" + (end - start));
    }

    @Test
    public void testLinkedList() {
        List<Integer> list = new LinkedList<>();
        long start = System.currentTimeMillis();
        for (int i = 0; i < 10000000; i++) {
            list.add((int)Math.random()*100);
        }
        long end = System.currentTimeMillis();
        System.out.println("linkedlist用时:" + (end - start));
    }



}

(2)查询效率

 ①for循环实现查询

package com.jr.morning;

import org.junit.Test;

import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CountDownLatch;

/*
集合的好多面试
1. Hashtable和ConcurrentHashMap性能测试

 */
public class Ch04 {
    @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);//千万别打印,电脑可能会崩
        }
        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);//千万别打印,电脑可能会崩
        }
        long end = System.currentTimeMillis();
        System.out.println("linkedlist用时:" + (end - start));
    }


}

②用迭代器实现查询

package com.jr.morning;

import org.junit.Test;

import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CountDownLatch;

/*
集合的好多面试
1. Hashtable和ConcurrentHashMap性能测试

 */
public class Ch04 {
    @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();
        // 用迭代器实现查询
        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();

        // 用迭代器实现查询
        Iterator<Integer>iterator=list.iterator();
        while (iterator.hasNext()){
            iterator.next();
        }
        long end = System.currentTime
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值