进行单元测试则需要添加junit的依赖:
##JUnit is a unit testing framework for Java, created by Erich Gamma and Kent Beck.
##对于java来说JUnit是一个单元测试的框架<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.1</version><scope>test</scope></dependency>
首先先在java下面创建个类:
package com.ruozedata.hadoop.junit;public class Cal {public int add(int a, int b){return a + b;}public int devide(int a, int b){//TODO... if判断0被除数不能为0return a/b;}
}
然后在test下面创建单元测试
Before和After:
一般开发代码中叫类名如果叫Cal,那么单元测试中,在类名的前面或者后面加上Test,如:CalTest
package com.ruozedata.hadoop.junit;import org.junit.After;
import org.junit.Before;
import org.junit.Test;import static org.junit.Assert.assertEquals;/*** 单元测试的使用案例** 遵循了一套执行标准:先执行setup,再执行test,再执行teardown* 这里使用了java里面的设计模式:模板模式*模板模式 就是定义好了步骤,第一步做什么、第二步做什么...,然后去执行* {* step1 setup* step2 test* step3 teardown* }** 不是说所有的测试都是测试人员干的* 单元测试:是开发人员干的** 开发了一个类:类里面有很多方法* 每个方法都需要进行单元测试,并且一个方法可能需要多个单元测试进行多角度的测试** 写的代码(含有单元测试)提交到git上面之后,* 测试人员再测试之前,会有自动化的测试工具Jenkins之类的* 会先跑单元测试,通过了之后才会进行打包、发布,然后再供QA测试人员进行测试** setup和teardown是每个测试方法,都会在执行之前、执行之后去执行* 这是个典型的模板模式*/
public class CalTest {Cal cal;/*** @ Before表示在某一个动作之前做的* 初始化的动作,建立MySQL连接、打开IO流等等*/@Beforepublic void setUp(){cal = new Cal();System.out.println("---setUp----");}//TODO...//@Test表示单元测试用例@Testpublic void testAdd(){System.out.println("---testAdd----");int result = cal.add(3, 6);//这里要加哥断言assert,断言:result是不是和期望值9是不是相等,//如果是9说明是通过的,如果不是说明有问题assertEquals(9,result);}//因为如果除数是0,那么会失败异常,//所以加了(expected = ArithmeticException.class)//这样的话如果除数是0,那么异常和自己期望的异常是一致的@Test(expected = ArithmeticException.class)public void testDevide(){System.out.println("---testDevide----");int result = cal.devide(10,0);//这里要加哥断言assert,断言:result是不是和期望值9是不是相等,//如果是9说明是通过的,如果不是说明有问题assertEquals(3,result);}/*** @ After表示在某一个动作之后做的* 资源释放操作:释放MySQL连接,关闭IO流等操作,和前面相对应*/@Afterpublic void tearDown(){System.out.println("---tearDown----");cal = null;}
}
BeforeClass和AfterClass:
package com.ruozedata.hadoop.junit;import org.junit.*;import static org.junit.Assert.assertEquals;/*** 在这个类里面,* BeforeClass只执行一次* AfterClass只执行一次** Before和After是每个测试方法都执行一次*/
public class CalTest02 {static Cal cal;@BeforeClasspublic static void setUpBeforClass(){System.out.println("---setUpBeforClass----");cal = new Cal();}@Beforepublic void setUp(){System.out.println("---setUp----");}@Testpublic void testAdd(){System.out.println("---testAdd----");int result = cal.add(3, 6);//这里要加哥断言assert,断言:result是不是和期望值9是不是相等,//如果是9说明是通过的,如果不是说明有问题assertEquals(9,result);}@Test(expected = ArithmeticException.class)public void testDevide(){System.out.println("---testDevide----");int result = cal.devide(10,0);//这里要加哥断言assert,断言:result是不是和期望值9是不是相等,//如果是9说明是通过的,如果不是说明有问题assertEquals(3,result);}@Afterpublic void tearDown(){System.out.println("---tearDown----");}@AfterClasspublic static void tearDownAfterClass(){System.out.println("---tearDownAfterClass----");cal = null;}
}