单元测试,JUnit4。html
这两个有什么关系呢?这就比如(草)单元测试和(割草机)。用这个JUnit4工具去辅助咱们进行测试。其实不理解这个也不要紧,听多了见多了用多了,天然而然地就会懂了。java
有人可能会想,那我直接本身编写个测试的方法不就能够了。例如写个System.out.print输出,看看是否与咱们预期的相等。Bingo!这样也是能够的。可是你有割草机不用,那效果也是很Duang的。express
开始我也以为没有必要使用割草机(JUnit)的,可是我了解了割草机(JUnit)以后,我很喜欢那种唰唰唰(绿条)的感受。小程序
若是你仍是一脸疑惑不知道什么是JUnit4,不知道单元测试,OK,Don‘t worry。Just Follow me.跟我一步一步来,先让你体验下唰唰唰的快感。api
第一步:框架
打开eclipse.exe,建立一个名为“Ives”的工项目,建立一个名为”UnitTest”的类。写几个方法:两数+ - * /的方法和返回结果的方法。dom
代码以下:eclipse
1 import java.util.*; 2 public class Expression { 3 int a; 4 int b; 5 static int c;//用户答案 6 int answer;//答案 7 static Scanner in=new Scanner(System.in); 8 9 10 public int Expression(){ 11 a = new Random().nextInt()%10; 12 b = new Random().nextInt()%10; 13 System.out.print(""+a+"+"+b+"="); 14 return answer = a + b; 15 16 } 17 public static void main(String[] args){ 18 int answer; 19 Expression expression = new Expression(); 20 answer = expression.Expression(); 21 try{ 22 Expression.c = in.nextInt(); 23 } 24 catch(InputMismatchException e) 25 { System.err.println("\nError ,please Enter a Int number"); 26 } 27 if(answer==c) 28 { 29 System.out.print("答对了"); 30 } 31 else System.out.print("答错了"); 32 //System.out.print("answer="+answer); 33 } 34 }
第二步:ide
Duang!酷炫的效果来了,跟紧脚步了。工具
将JUnit4单元测试包引入这个项目:在该项目“Ives”上点右键,点“属性”(Properties),如图:
在弹出的属性窗口中,首先在左边选择“Java 构建路径”(Java Build Path),而后到右上选择"库(L)"(Libraries)标签,以后在最右边点击“添加库(A)”(Add Libraries)按钮,以下图所示:
点击完成,JUnit4软件包就被包含进咱们这个项目了。
第三步:
生成JUnit测试框架:在Eclipse的包资源管理器(Package Explorer)中用右键点击该类”UnitTest“弹出菜单,选择 新建 →JUnit测试用例 (New à JUnit Test Case)。以下图所示:
在弹出的对话框中,进行相应的选择,以下图所示:
点击完成以后会出现以下图:
千万不要去删除@Test这个标志很重要的!!!!!而后把fail(“还没有实现”)删除,把本身的代码敲进去就能够了。我选择了测试4个方法,因此它会自动生成4个测试方法。
Duang!!!
那测试方法怎么写呢?举个例子,我想知道个人UnitTest里面的plus方法有没有写对,那我就对这个方法写个测试。把a,b两个数传递进去,例如a=1和b=1,那a+b就等2,因此这里咱们又要了解新的东西了。那就是关于JUnit 的api了,下面有关于JUnit的api,到时候我看看要不要贴几个经常使用的方法出来,加上实例,这样会更加容易理解。
继续咱们的话题:咱们知道a+b=2,因此若是plus方法的result是2的话,那就说明了咱们的这个plus暂时没有这类型的bug。因此咱们要用到方法assertEquals(double expected, double actual)
这个方法里的double expected是咱们指望的值,double actual是实际的值。例如
assertEquals(2, a+b),这样就能够测试方法有没有算错了。其实电脑通常都不会算错吧?哈哈
完整的测试代码以下:
1 import static org.junit.Assert.*; 2 import org.junit.Test; 3 4 public class UnitTestTest { 5 public static UnitTest puls = new UnitTest(); 6 public static int answer; 7 @Test 8 public void testPlus() { 9 puls.plus(1,1); 10 assertEquals(2, puls.getresult()); 11 } 12 13 @Test 14 public void testMinus() { 15 puls.minus(1,1); 16 assertEquals(0, puls.getresult()); 17 } 18 19 @Test 20 public void testMultiply() { 21 puls.multiply(1,1); 22 assertEquals(1, puls.getresult()); 23 24 } 25 26 @Test(expected=ArithmeticException.class) 27 public void testDivide1(){ 28 puls.divide(0, 1); 29 } 30 31 @Test 32 public void testDivide() { 33 puls.divide(1,1); 34 assertEquals(1, puls.getresult()); 35 } 36 }
可能用心看的童鞋可能会发现我还写了一个测试时关于有没有抛出异常的。若是除数为0那就抛出异常,再去测试它除数为0是有没有抛出异常。有人可能会问,我不知道什么异常啊,很简单,看
咱们写完代码,那么唰唰唰的快感立刻就要到来了。
我把minus方法里的“减号”改为了“加号”:以下图
而后在运行测试类UnitTestTest.以下图:
被测试的代码有bug,也就是以前把-修改为了+,因此就会出故障。
因此当所有都是绿色的时候是否是很爽,有没有感觉到割草机(JUnit4)的唰唰唰的快感。
哈哈,教程到这里就结束了。是否是还想要更多?那就持续关注个人博客吧,可能会在更新一遍更加细节的。
我的体会:
1.测试类必定要看清楚有没有写对,有时候复制黏贴没有修改就会出现错误,因此要看清楚调用的方法对了没有。
2.这个好像真的有比本身写一个测试类来测试更爽,由于有一条绿色的东西,感受很好玩。
3.我以为这些小程序不须要写单元测试,并且看到好多人在网上吐槽说如今基本作开发的都不会去写单元测试的,不过,写多点没事儿,所学点更好。因此我不想去追究之后有没有用,如今能学想学那就去学,能写想写,那就去写。因此有时候真的不须要问为何?有不少事情你如今作可能没有收益,也可能之后也没有收益,那为何要去作呢?
柯腾说,你信不信十年后,我连log是什么都不知道,还能够活得好好的。 沈佳宜说,我知道。 柯景腾说,那你还那么用功读书。 沈佳宜说,人生原本不少事就是徒劳无功的啊!不是每一件事必定要有意义,经历一样很宝贵!
有感而发,就引用了这句话了。哈哈
---------这篇博文就到此结束了------------
--------若是以上有什么错误或者不足之处,欢迎指出。--------
PS:长期招募小伙伴一块儿组成一个团队学习软件开发(java), 能够合做开发软件,也能够讨论交流,有志同道合的小伙伴能够发站内消息。
附:
Junit API:http://www.udel.edu/CIS/software/dist/junit4.1/javadoc/