多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
[TOC] # 类加载器 类加载器就加载字节码文件(.class) ![](https://box.kancloud.cn/5c85e2b3157c3553ceb7787b24ef4f7e_803x299.jpg) ## 类加载器的种类 类加载器有三种,不同类加载器加载不同的 ![](https://box.kancloud.cn/10caa57d3d833c89a6f255ede198aa7b_622x268.jpg) 1)BootStrap:引导类加载器:加载都是最基础的文件 2)ExtClassLoader:扩展类加载器:加载都是基础的文件 3)AppClassLoader:应用类加载器:三方jar包和自己编写java文件 怎么获得类加载器? ClassLoader 字节码对象.getClassLoader(); ~~~ //获得Demo字节码文件的类加载器 Class clazz = Demo.class;//获得Demo的字节码对象 ClassLoader classLoader = clazz.getClassLoader();//获得类加载器 //getResource的参数路径相对classes(src) //获得classes(src)下的任何的资源 String path = classLoader.getResource("com/wdsa/classloader/jdbc.properties").getPath(); //classLoader.getResourceAsStream(""); System.out.println(path); ~~~ # 注解 # # junit4注解 ~~~ /* * @Test:将一个普通方法修饰为一个测试方法 * @Test(exception=XXX.class) * @Test(time=毫秒) * @BeforeClass:它会在所有的测试方法前被执行,static修饰 * @AfterClass:它会在所有的测试方法后被执行,static修饰 * @Before:它会在每一个测试方法前被执行一次 * @After:它会在每一个测试方法后被执行一次 * @Ignore:省略 * @RunWith:修改运行器org。junit。runner。Runner * * */ ~~~ 其实@Test不仅可以修饰一个普通方法为测试方法,还可以获取异常或者控制测试方法的执行时间 ## @Test的功能 A,获取异常 B,控制测试代码执行时间 A,获取异常代码展示 1,获取异常,对异常的捕获:@Test(expected=XXX.class) ~~~ package com.duo.util; import static org.junit.Assert.*; import org.junit.Test; public class Anotation { @Test(expected=ArithmeticException.class) public void testDivide(){ assertEquals(4, new Calculate().divide(12, 0)); } } ~~~ 运行后结果 ![](https://box.kancloud.cn/49e4d8fd2fe92e3899b29b82aff6af7d_469x333.png) 2. 没有通过@Test(expected=ArithmeticException.class)注解时代码以及结果: ~~~ package com.duo.util; import static org.junit.Assert.*; import org.junit.Test; public class Anotation { @Test public void testDivide(){ assertEquals(4, new Calculate().divide(12, 0)); } } ~~~ 运行结果 ![](https://box.kancloud.cn/685b5046e3befec802fe0ba2b702d07b_459x419.png) B,控制测试代码执行时间,代码展示 测试方法控制@Test(timeout=毫秒),主要是针对代码中有循环代码的测试控制或者超时运行不符合预期的判定 1,我们使用对一个死循环进行测试: ~~~ package com.duo.util; import static org.junit.Assert.*; import org.junit.Test; public class Anotation { @Test(timeout=2000) public void testWhile(){ while(true){ System.out.println("run forever..."); } } } ~~~ 结果及时运行2秒后系统自动停止运行; 2,让当前线程运行2000毫秒,测试代码运行3000毫秒,符合预期结果 ~~~ package com.duo.util; import static org.junit.Assert.*; import org.junit.Test; public class Anotation { @Test(timeout=3000) public void testReadFile(){ try { Thread.sleep(2000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } ~~~ 运行结果通过; 也可以通过调整测试时间比线程时间小,测试不符合预期的场景; 三,Ignore注解(该注解可以忽略当前的运行的方法,有时候改测试方法没有实现或者以后再实现) ~~~ package com.duo.util; import static org.junit.Assert.*; import org.junit.Ignore; import org.junit.Test; public class Anotation { @Test(expected=ArithmeticException.class) public void testDivide(){ assertEquals(4, new Calculate().divide(12, 0)); } @Ignore @Test(timeout=2000) public void testWhile(){ while(true){ System.out.println("run forever..."); } } @Test(timeout=3000) public void testReadFile(){ try { Thread.sleep(2000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } ~~~ 运行结果 ![](https://box.kancloud.cn/1eeaf7b00e804bf659bffa8c71ee3203_679x174.png) 四,RunWith,可以修改测试运行器:org.junit.runner.Runner(后面使用到再解释) 五,断言:assert 断言assert的好多方法可以直接使用,主要是使用了静态导入:import static org.junit.Assert.*;