单元测试代码的使用
1>什么是单元测试:
1、单元测试是针对最小的功能单元编写测试代码。
2、Java程序最小的功能单元是方法。
3、单元测试就是针对单个Java方法的测试。
2>使用main()方法测试的缺点:
只能有一个main()方法,不能把测试代码分离。
3>单元测试的好处:
1、确保单个方法运行正常
2、如果修改了方法代码,只需确保其对应的单元测试通过
3、测试代码本身就可以作为示例代码
4、可以自动化运行
4>声明的单元测试方法:
方法的权限是public,没有返回值,没有形参。
public class JUnitTest{
@Test
public void testEquals(){
}
}
5>快捷键(创造测试类的办法)
1、第一种
光标放在类名上,
alt+insert
点击JUnit4就生成了测试类。
2、第二种
右击项目名javaproject1,新建Directory
输入test
生成
alt+enter进入或者右键
直接点创建测试
自行选择要测试的
律师test中生成测试类和目录
结束。
一个小贴士
右击标记为测试源 根,变绿
变绿后右边出现运行 绿纽
6>课外资料
https://blog.csdn.net/qq_36568192/article/details/79857185单元测试csdn详解
https://www.cnblogs.com/rocedu/p/6371315.html#FHML单元测试博客园详解
https://www.bilibili.com/video/BV1vJ411W76t?p=3&spm_id_from=pageDriver黑马程序员
包装类
test0 引入
java提供了8种基本数据类型对应的包装类,使得基本数据类型的变量具有类的特征。
包装类就是把基本数据类型包进去并加一些方法就成了包装类,前六个包装类均为数值型,它们的父类是Number类。包装后可以定义丰富的方法。(除红色外包装类都是首字母大写即可)
idea中 ctrl + H 能查看类层次结构。
1、test1
基本数据类型 —>包装类:调用包装类的构造器
2、test2
包装类—>基本数据类型:调用包装类Xxx的xxxValue()
3、test3
JDK 5.0 新特性:自动装箱 与自动拆箱
4、test4
基本数据类型、包装类—>String类型:调用String重载的valueOf(Xxx xxx)
5、test5
String类型 —>基本数据类型、包装类:调用包装类的parseXxx(String s)
6、一个转化图(看看就好)
7、代码区(test12345)
import org.junit.Test;
/*
* 包装类的使用:
* 1.java提供了8种基本数据类型对应的包装类,使得基本数据类型的变量具有类的特征
*
* 2.掌握的:基本数据类型、包装类、String三者之间的相互转换
*
*
*
*/
public class WrapperTest {
//test5
// String类型 --->基本数据类型、包装类:调用包装类的parseXxx(String s)
@Test
public void test5(){
String str1 = "123";
//错误的情况:
// int num1 = (int)str1;
// Integer in1 = (Integer)str1;(编译错误)(能强转的一定要有子父类关系)
//可能会报NumberFormatException(比如String str1 = "123a";)
//调用包装类的parseXxx(String s)
int num2 = Integer.parseInt(str1);
System.out.println(num2 + 1);//124
String str2 = "true1";
boolean b1 = Boolean.parseBoolean(str2);
System.out.println(b1);//false(不是标准的true就是false)
}
//test4
// 基本数据类型、包装类--->String类型:调用String重载的valueOf(Xxx xxx)
@Test
public void test4(){
//基本数据类型--->String类型
int num1 = 10;
//方式1:连接运算(基本数据类型+字符串等于String型)
String str1 = num1 + "";
//方式2:调用String的valueOf(Xxx xxx)
float f1 = 12.3f;
String str2 = String.valueOf(f1);//"12.3"
//包装类--->String类型
Double d1 = new Double(12.4);
String str3 = String.valueOf(d1);
System.out.println(str2);//"12.3"
System.out.println(str3);//"12.4"
}
/*
* test3
* JDK 5.0 新特性:自动装箱 与自动拆箱
*/
@Test
public void test3(){
// int num1 = 10;
// //虽然有自动装箱机制,但是 基本数据类型-变为->包装类的对象才能放到method()当中
//method()方法的参数需要是类类型,num1不可以
// method(num1);
//自动装箱:基本数据类型 --->包装类
int num2 = 10;
Integer in1 = num2;//自动装箱(int型变量直接赋给类Integer)
boolean b1 = true;
Boolean b2 = b1;//自动装箱
//自动拆箱:包装类--->基本数据类型
System.out.println(in1.toString());
int num3 = in1;//自动拆箱(把包装类的对象直接3赋给基本数据类型)
}
public void method(Object obj){
System.out.println(obj);
}
//test2
// 包装类--->基本数据类型:调用包装类Xxx的xxxValue()
@Test
public void test2(){
Integer in1 = new Integer(12);
int i1 = in1.intValue();
System.out.println(i1 + 1);//13
Float f1 = new Float(12.3);
float f2 = f1.floatValue();
System.out.println(f2 + 1);//13.3
}
//test1
// 基本数据类型 --->包装类:调用包装类的构造器
@Test
public void test1(){
int num1 = 10;
// System.out.println(num1.toString());//不可以,基本数据类型调用不了方法。
Integer in1 = new Integer(num1);
System.out.println(in1.toString());//10
Integer in2 = new Integer("123");
System.out.println(in2.toString());//123
//这里 构造器 用String 类型的做形参,如果String类型的做形参,必须是一个数,不然就和下面一样报异常了。
//报异常
// Integer in3 = new Integer("123abc");
// System.out.println(in3.toString());//报错
Float f1 = new Float(12.3f);
Float f2 = new Float("12.3");
System.out.println(f1);//12.3
System.out.println(f2);//12.3
Boolean b1 = new Boolean(true);//true
Boolean b2 = new Boolean("true");//这里忽略大小写TrUe也是真
System.out.println(b2);//true
Boolean b3 = new Boolean("true123");
System.out.println(b3);//false
//boolean基本数据类型默认是false,Boolean引用数据类型默认是null
Order order = new Order();
System.out.println(order.isMale);//false
System.out.println(order.isFemale);//null
}
}
class Order{
boolean isMale;
Boolean isFemale;
}
结果:
包机制的常见面试题
例题1、
三元运算符要求后边两个是一个类型,否则无法编译,所以Integer会自动类型提升升级为double,所以此题答案是1.0
例题2、
(1)这里的 i 和 j 的地址不一样,所以i== j比较地址时是错误的。
(2) -128到127的数已经缓存好了,用的时候指向指向数组中相应位置,m和n都用1,都指向数组中同一个地址,所以是true。
(3)128不在-128到127的范围内,需要重新new Integer(128),128没有缓存过,所以是两个不同的地址,所以是false。
包装类的一些练习
此题涉及自动装箱和自动拆箱。(类跳度强转有点大)
import java.util.Scanner;
import java.util.Vector;
/*
* 利用Vector代替数组处理:从键盘读入学生成绩(以负数代表输入结束),找出最高分,并输出学生成绩等级。
提示:数组一旦创建,长度就固定不变,所以在创建数组前就需要知道它的长度。
而向量类java.util.Vector可以根据需要动态伸缩。
创建Vector对象:Vector v=new Vector();
给向量添加元素:v.addElement(Object obj); //obj必须是对象
取出向量中的元素:Object obj=v.elementAt(0);
注意第一个元素的下标是0,返回值是Object类型的。
计算向量的长度:v.size();
若与最高分相差10分内:A等;20分内:B等;
30分内:C等;其它:D等
*
*/
public class ScoreTest {
public static void main(String[] args) {
//1.实例化Scanner,用于从键盘获取学生成绩
Scanner scan = new Scanner(System.in);
//2.创建Vector对象:Vector v=new Vector();相当于原来的数组
Vector v = new Vector();
//3.通过for(;;)或while(true)方式,给Vector中添加数组
int maxScore = 0;
for(;;){
System.out.println("请输入学生成绩(以负数代表输入结束)");
int score = scan.nextInt();
//3.2 当输入是负数时,跳出循环
if(score < 0){
break;
}
if(score > 100){
System.out.println("输入的数据非法,请重新输入");
continue;
}
//3.1 添加操作::v.addElement(Object obj)
//jdk5.0之前:
// Integer inScore = new Integer(score);
// v.addElement(inScore);//多态
//jdk5.0之后:
v.addElement(score);//自动装箱
//4.获取学生成绩的最大值
if(maxScore < score){
maxScore = score;
}
}
//5.遍历Vector,得到每个学生的成绩,并与最大成绩比较,得到每个学生的等级。
char level;
for(int i = 0;i < v.size();i++){
Object obj = v.elementAt(i);
//jdk 5.0之前:
// Integer inScore = (Integer)obj;
// int score = inScore.intValue();
//jdk 5.0之后:
int score = (int)obj;
if(maxScore - score <= 10){
level = 'A';
}else if(maxScore - score <= 20){
level = 'B';
}else if(maxScore - score <= 30){
level = 'C';
}else{
level = 'D';
}
System.out.println("student-" + i + " score is " + score + ",level is " + level);
}
}
}