JUnit单元测试
JUnit是一个Java语言单元测试框架。
JUnit单元测试的好处
- 可以书写一系列的测试方法,对项目的所有的接口或者方法进行单元测试
- 启动后,自动化的测试
- 只需要查看最后的结果
- 每个单元测试的用例相对独立,由JUnit启动。
- 添加、删除、屏蔽测试方法
Jar包
如果要引入第三方的插件,引入xxx.jar的文件
首先,要把这个文件导入到我们的工程目录下
其次,要添加到工程的依赖目录中
@Test public void test01(){ System.out.println("hello junit"); }
测试方法:(除了方法名什么都不要动)
- 不能有返回值
- 不能有参数
JUnit断言
JUnit的所有的断言都包含在Assert中,这个类提供了很多有用的断言来编写测试用例,只有失败的断言才会被记录,断言不成功会抛异常,即使程序正常运行但是结果不正确,也会以失败结束
- assertEquals;检查两个变量或等式是否平衡
- assertTrue:检查条件是否为真
- assertFalse:检查条件是否为假
- assertNotnull:检查对象是否不为空
- assertNull:检查对象是否为空
public class Ch02 { @Test public void test01() { Assert.assertTrue(false); } }
JUnit注解
- Test
- Before:在测试方法之前执行的方法
- After
命名规范:
单元测试类的命名:被测试的类名 + Test
测试方法的命名:test + 被测试方法的方法名
@Test
public void test01() {
System.out.println("test01方法执行...");
}
@Before
public void testBefore(){
System.out.println("before方法执行...");
}
@After
public void testAfter() {
System.out.println("after方法执行...");
}
集合的好多面试题:
- Hashtable和ConcurrentHashMap性能测试
- LinkedList和ArrayList性能测试
数组查询快,插入慢,链表插入快,查询慢
- 尾插数组快,链表慢
- 遍历数组快
- 头插,链表快,数组慢
- 随机删除,如果要过滤,建议用LinkedList
总结:开发中,还是以arrayList为主
Stream编程(JDK8新增)
容器对象功能的增强
我们可以将流看做流水线,这个流水线是处理数据的流水线;
三个步骤
- 获取一个数据源
- 执行操作获取想要的结果
- 每次操作,原有的流对象不改变,返回一个新的Stream对象
Stream的几个对象
- Stream不会储存数据,一般会输出结果
- Stream不会改变数据源,通常情况下会生成一个新的集合
- Stream具有延迟执行的特性,只有调用终端操作时,中间操作才会执行
创建流
创建一个顺序流和一个并行流
List<String> list = Arrays.asList("a","b","c");
// 创建一个顺序流
Stream<String> stream = list.stream();
// 创建一个并行流
Stream<String> parallelStream = list.parallelStream();
双冒号语法
引用已经存在的方法值
// 打印集合元素
// 双冒号语法,方法引用
simpleList.stream().forEach(System.out::println);
// 其实还可以简化操作
simpleList.forEach(System.out::println);
筛选filter(必须会)
simpleList.stream().filter(item -> item > 17).forEach(System.out::println);
筛选并存入新的集合
// 筛选员工中工资大于8000的人,并形成新的集合
List<Person> collect = personList
.stream()
.filter(item -> item.getSalary() > 5000)
.collect(Collectors.toList());
System.out.println(collect);
映射(重要)
将一个流的元素按照一定的映射规则映射到另一个流中
将员工的工资全部增加1000
personList
.stream().map(item -> {
item.setSalary(item.getSalary() + 1000);
return item;
}).forEach(System.out::println);
排序sorted
自然排序(升序)
List<String> collect = personList.stream()
.sorted(Comparator.comparing(Person::getSalary))
.map(Person::getName)
.collect(Collectors.toList());
System.out.println(collect);
临时排序(降序)
// 按照员工工资的降序
List<String> collect1 = personList
.stream()
.sorted(Comparator.comparing(Person::getSalary).reversed())
.map(Person::getName)
.collect(Collectors.toList());
System.out.println(collect1);
其他操作:
distinct:去重
Skip:跳过几个数据
Limit:限制使用几个数据
Java IO流---对于文件的操作
Input:把数据从物理内存加载到运行内存(读文件)
Output:把数据从运行内存写到物理内存(写文件)
Java.io包下的类
计算机的输入输出都是通过二进制完成
0和1
工具类:File操作文件的类
正斜杠:左斜杠,/
反斜杠:右斜杠,\
在Unix/Linux,路径的分隔采用正斜杠/
在window中,路径分隔采用反斜杠\
在java中,\代表转义,路径中一定要用两个\\
System.out.println("\t"); System.out.println("E:\\"); System.out.println("E:/workspace");
在File类中,定义了路径分隔符的常量,自动识别操作系统
System.out.println(File.separator); System.out.println("e:" + File.separator + "workspace");
文件的操作
创建一个文件,要抛异常,可能不存在e盘
新建文件不会覆盖已有的文件
// 创建一个文件
File file1 = new File("e:\\aaa.txt");
try {
file1.createNewFile();
System.out.println("文件创建成功...");
} catch (IOException e) {
e.printStackTrace();
}
删除文件:不用抛异常,如果存在就删除,如果不存在就算了,有返回值,不走回收站
File file = new File("e:\\aaa.txt");
// 如果存在就删除,如果不存在就拉倒
// file类的删除是不走回收站
boolean delete = file.delete();
System.out.println(delete);
文件夹(目录)
创建文件夹
mkdir只能创建一级,mkdirs能创建多级文件夹,尽量用mkdirs
File file = new File("e:/hello");
boolean mkdir = file.mkdir();
boolean b = file.mkdirs();
删除文件
file.delete();
判断文件是否存在
System.out.println(file.exists());
绝对路径和相对路径
绝对路径:已盘符开头
相对路径:没有指定的盘符开头,会创建到当前项目所在盘下
File file = new File("e:/aaa.txt");
File file2 = new File("E:\\idea");
功能
1、获取绝对路径和相对路径,返回值是字符串
2、获取对象 获取相应的相对路径的那个对象
3、获取上一级路径
4、获取路径getpath
5、最后一次修改时间LastModified
获取字节长度
重命名