单元测试
Junit单元测试框架
![image-20251102135201351]()
![image-20251102135232487]()
package Basic.src.com.Junit;public class StringUtil {public static void printNumber(String name) {if (name == null) {System.out.println(0);return;//停掉方法}System.out.println("名字的长度是:"+name.length());}/*** 求字符串最大索引*/public static int getMaxIndex(String data){if(data==null||data.length()==0){return -1;}return data.length()-1;}
}
package Basic.src.com.Junit;import org.junit.Assert;
import org.junit.Test;/*** 测试类*/
public class StringUtilTest {@Test //测试方法,要先导入框架才不会报错public void testPrintNumber(){//测试方法一定是公开无返回值无参数StringUtil.printNumber("admin");StringUtil.printNumber(null);}@Testpublic void testGetMaxIndex(){int index1 = StringUtil.getMaxIndex(null);System.out.println(index1);int index2 = StringUtil.getMaxIndex("admin");System.out.println(index2);//断言机制:程序员可以通过预测业务方法的结果Assert.assertEquals("wrong",4,index2);}
}
![image-20251102172758208]()
![image-20251102174348747]()
package Basic.src.com.Junit;import org.junit.*;import java.net.Socket;/*** 测试类*/
public class StringUtilTest {//private Socket socket;private static Socket socket;@BeforeClass//初始化资源public static void setUpBeforeClass() throws Exception {System.out.println("---------setUpBeforeClass 执行了----------------");socket = new Socket("127.0.0.1", 9999);}@AfterClass//释放资源public static void tearDownAfterClass() throws Exception {System.out.println("---------tearDownAfterClass 执行了----------------");socket.close();}@Before//可以用来写环境准备的代码public void test1(){System.out.println("------->test1 before 执行了---------------");//socket = new Socket();//连接}@Afterpublic void test2(){System.out.println("------->test2 before 执行了---------------");//socket.close();}@Test //测试方法,要先导入框架才不会报错public void testPrintNumber(){//测试方法一定是公开无返回值无参数StringUtil.printNumber("admin");StringUtil.printNumber(null);}@Testpublic void testGetMaxIndex(){int index1 = StringUtil.getMaxIndex(null);System.out.println(index1);int index2 = StringUtil.getMaxIndex("admin");System.out.println(index2);//断言机制:程序员可以通过预测业务方法的结果Assert.assertEquals("wrong",4,index2);}
}
反射
![image-20251102175340151]()
![image-20251102175404706]()
package Basic.src.com.reflect;public class Test1Class {public static void main(String[] args) throws Exception {Class<Student> c1 = Student.class;System.out.println(c1.getName());//全类名System.out.println(c1.getSimpleName());//简名 Student//Class.forName(c1.getName());Class<?> c2 = Class.forName("Basic.src.com.reflect.Student");System.out.println(c1 == c2);Student s = new Student();Class<? extends Student> c3 = s.getClass();System.out.println(c2 == c3);}
}
![image-20251102194147028]()
package Basic.src.com.reflect;import org.junit.Test;import java.lang.reflect.Constructor;public class Test2Constructor {@Testpublic void testGetConstructors(){//1.反射第一步,必须要先得到这个类的Class对象Class<Cat> c = Cat.class;//2.获取类的全部构造器//Constructor<?>[] constructors = c.getConstructors();//只能拿到被public修饰的构造器Constructor<?>[] declaredConstructors = c.getDeclaredConstructors();//获取全部构造器//3.遍历确认for (Constructor<?> declaredconstructor : declaredConstructors) {System.out.println(declaredconstructor.getName()+"----------"+declaredconstructor.getParameterCount());//Basic.src.com.reflect.Cat----------0无参//Basic.src.com.reflect.Cat----------2}Student student = new Student();}@Testpublic void testGetConstructor() throws Exception {//1.反射第一步,必须要先得到这个类的Class对象Class<Cat> c = Cat.class;//2.获取某一个构造器(这里是无参构造器)//Constructor<Cat> constructor = c.getConstructor();//只能拿public修饰的Constructor<Cat> constructor = c.getDeclaredConstructor();//都能拿//3.获取有参构造器Constructor<Cat> declaredConstructor = c.getDeclaredConstructor(String.class, int.class);//要写上.class,私有的也可以拿到System.out.println(declaredConstructor.getName()+"----------"+declaredConstructor.getParameterCount());}
}
![image-20251102194356765]()
package Basic.src.com.reflect;import org.junit.Test;import java.lang.reflect.Constructor;public class Test2Constructor {@Testpublic void testGetConstructors(){//1.反射第一步,必须要先得到这个类的Class对象Class<Cat> c = Cat.class;//2.获取类的全部构造器//Constructor<?>[] constructors = c.getConstructors();//只能拿到被public修饰的构造器Constructor<?>[] declaredConstructors = c.getDeclaredConstructors();//获取全部构造器//3.遍历确认for (Constructor<?> declaredconstructor : declaredConstructors) {System.out.println(declaredconstructor.getName()+"----------"+declaredconstructor.getParameterCount());//Basic.src.com.reflect.Cat----------0无参//Basic.src.com.reflect.Cat----------2}Student student = new Student();}@Testpublic void testGetConstructor() throws Exception {//1.反射第一步,必须要先得到这个类的Class对象Class<Cat> c = Cat.class;//2.获取某一个构造器(这里是无参构造器)//Constructor<Cat> constructor = c.getConstructor();//只能拿public修饰的Constructor<Cat> constructor1 = c.getDeclaredConstructor();//都能拿,<cat>声明一个泛型constructor1.setAccessible(true);//禁止检查访问权限Cat cat = constructor1.newInstance();//完成对象初始化:有声明之后newInstance()的返回值才可以拿cat类去接收,否则得强转System.out.println(cat);//3.获取有参构造器Constructor<Cat> constructor2 = c.getDeclaredConstructor(String.class, int.class);//要写上.class,私有的也可以拿到System.out.println(constructor2.getName()+"----------"+constructor2.getParameterCount());constructor2.setAccessible(true);Cat cat2 = constructor2.newInstance("哈基滨", 3);System.out.println(cat2);}
}
![image-20251102201843170]()
package Basic.src.com.reflect;import org.junit.Test;import java.lang.reflect.Field;public class Test3Field {@Testpublic void testGetFields() throws Exception {//1.反射第一步,必须是得到类的Class对象Class<Cat> c = Cat.class;//2.获取类的全部成员变量Field[] fields = c.getDeclaredFields();//3.遍历这个成员变量for (Field field : fields) {System.out.println(field.getName()+"----------"+field.getType());}//4.定位某个成员变量Field fName = c.getDeclaredField("name");System.out.println(fName.getName()+"----------"+fName.getType());Field fAge = c.getDeclaredField("age");System.out.println(fAge.getName()+"----------"+fAge.getType());//赋值fName.setAccessible(true);fAge.setAccessible(true);Cat cat1 = new Cat();//public Cat()Cat cat2 = new Cat();fName.set(cat1,"咖啡猫");System.out.println(cat1);//取值String name = (String)fName.get(cat2);System.out.println(name);};
}