进行单元测试则需要添加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被除数不能为0
return 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流等等
*/
@Before
public void setUp(){
cal = new Cal();
System.out.println("---setUp----");
}
//TODO...
//@Test表示单元测试用例
@Test
public 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流等操作,和前面相对应
*/
@After
public 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;
@BeforeClass
public static void setUpBeforClass(){
System.out.println("---setUpBeforClass----");
cal = new Cal();
}
@Before
public void setUp(){
System.out.println("---setUp----");
}
@Test
public 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);
}
@After
public void tearDown(){
System.out.println("---tearDown----");
}
@AfterClass
public static void tearDownAfterClass(){
System.out.println("---tearDownAfterClass----");
cal = null;
}
}