经过前面基础部门的学习,希望大家都把基础打闹再继续深入探究java应用层面的知识,以后的日子我会继续更新java进阶知识,深入探究实际工作中的java应用,说的不好的地方还请见谅,如果能提出你宝贵的建议,或是参与评论我将荣幸之至!
自定义泛型方法:
public static <T> T result(T t)
1.junit单元测试框架
注意:测试代码不要写在项目中,用完再删掉,或者新建测试类
一:需要他的原因:a.我们在测试一段代码是否有用一般会再main主函数中测试
b.目前的结果都是通过人工对比
这两个操作大大加大了我们的工作量,junit就能自动帮我们完成这些操作
二:下载:http://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22junit%22%20AND%20a%3A%22junit%22
junit.jar
三:使用现状:
一般大公司用这个,员工上班首先到SVN上将文件checkout下来,然后运行单元测试,测试没有问题就说明代码没有问题,完后再用junit.jar测试没有问题再提交到svn中
四:使用方法:
(一)安装配置:将下好的junit.jar在项目文件夹下新建一个lib文件夹用来存放一些工具类,再通过bulid path添加到项目中能让项目识别
(二)a.直接加@Test测试:这种测试需要被测试的方法满足几个条件(1.没有放回值就void 2.方法没有参数3.测试的方法不能是static修饰。)
@Test public void sort(){ int[] arr = {12,4,1,19}; for(int i = 0 ; i < arr.length-1 ; i++){ for(int j = i+1 ; j<arr.length ; j++){ if(arr[i]>arr[j]){ int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } } System.out.println("数组的元素:"+Arrays.toString(arr)); }
b.实际项目中的测试代码依然加@Test,但是单独为其创建测试代码
我们在实际的项目中不可能要测试代码都要满足(1.没有放回值就void 2.方法没有参数)这样两个条件几乎是不可能的所以对应就有解决方案:
为需要测试的工具类添加对应的测试工具类(命名规则:被测试的类:类名+Test;被测试方法:test+方法名)
例子:
要测试的类:
public class Tool {
public static int getMax(int a,int b){
/*int a = 3;
int b =5; */
int max = a>b?a:b;
return max;
}
public static int getMin(){
int a = 3;
int b = 5;
int min = a<b?a:b;
return min;
}
}
创建的测试类
public class ToolTest { @Test public void testGetMax(){ int max=Tool.getMax(3, 4); if(max!=4){ throw new RuntimeException(); }else{ System.out.println("z最大值:"+max); } } @Test public void testGetMin(){ int min=Tool.getMin(); if(min!=3){ throw new RuntimeException(); }else{ System.out.println("最小值:"+min); } } }
c.测试结果人工对比junit的解决方法:断言Assert
用了断言:不仅剩下一大笔代码,还减少了测试运行时间其中:
Assert.assertSame():内部比较机制==;Assert.assertEquals(expected, actual):内部比较机制“Equel”;
@Test public void testGetMax(){ int max=Tool.getMax(3, 4); /*if(max!=4){ throw new RuntimeException(); }else{ System.out.println("z最大值:"+max); }*/ Assert.assertSame(4, max); }
c.如果测试一个方法的时候需要准备测试的环境或者是清理测试的环境,那么可以@Before、 @After 、@BeforeClass、 @AfterClass这四个注解。
@Before、 @After 是在每个测试方法测试的时候都会调用一次, @BeforeClass、 @AfterClass是在所有的测试方法测试之前与测试之后调用一次而已。
例子:
//准备测试的环境 //@Before @BeforeClass public static void beforeRead(){ System.out.println("准备测试环境成功..."); } //读取文件数据,把把文件数据都 @Test public void readFile() throws IOException{ FileInputStream fileInputStream = new FileInputStream("F:\a.txt"); int content = fileInputStream.read(); System.out.println("内容:"+content); } @Test public void sort(){ System.out.println("读取文件数据排序.."); } //清理测试环境的方法 // @After @AfterClass public static void afterRead(){ System.out.println("清理测试环境.."); }