JUnit

@Before:这个注解表示这个方法会在每个测试方法执行之前执行一次
@AfterClass:这个注解表示这个方法会在所有方法执行完毕之后执行,通常用来释放资源
@BeforeClass:这个注解表示这个方法会在所有测试方法执行之前执行,有多少个测试方法就会执行多少次
@After:这个注解表示这个方法会在每个测试方法执行之后执行一次,有多少个测试方法就会执行多少次

 /**
  * 测试套件类
  * 测试套件是用来组织多个测试类一起运行的,使用 @RunWith注解
  * 更改测试运行器为Suite.class,将要测试的类作为数组传入
  * 到Suite.SuiteClasses({})中,测试套件类不能包含其他测试方法
  * 
  * 样例如下:
  */
 @RunWith(Suite.class)
 @Suite.SuiteClasses({ TaskTest1.class, TaskTest2.class, TaskTest3.class })
 public class SuiteTest {}
参数化测试

对于一个方法需要进行多种场景进行测试时,可以通过参数化测试减少测试的工作量。用法如下:

 @RunWith(Parameterized.class)
 public class ParameterTest {
 
     /**
          * 1、更改测试运行器为RunWith(Parameterized.class)
      * 2、声明变量用来存放预期值与结果值
      * 3、声明一个返回值为Collection的公共静态方法,并使用@Parameters进行修饰
      * 4、位测试类声明一个带有参数的公共构造方法,并在其中为声明变量赋值
      */
     
     int except;  //用来存储预期结果
     int input1;  //用来存储第一个输入参数
     int input2;  //用来存储第二个输入参数
     
     @Parameters
     public static Collection<Object[]> initTestData(){
     return Arrays.asList(
         new Object[][]{
         {3,1,2},
         {10,5,5},
         {6,4,2},
         {7,3,4}}
         );
     }
     
     public ParameterTest(int except,int input1,int input2){
     this.except = except;
     this.input1 = input1;
     this.input2 = input2;
     }
   
     @Test
     public void testAdd() {
     assertEquals(except, new Claculate().add(input1, input2));
     }
  }
JUnit的一些注意事项:

测试方法必须使用@Test修饰
测试方法必须使用public void进行修饰,不能带参数
一般使用单元测试会新建一个test目录存放测试代码,在生产部署的时候只需要将test目录下代码删除即可
测试代码的包应该和被测试代码包结构保持一致
测试单元中的每个方法必须可以独立测试,方法间不能有任何依赖
测试类一般使用Test作为类名的后缀
测试方法使一般用test作为方法名的前缀

Failure:一般是由于测试结果和预期结果不一致引发的,表示测试的这个点发现了问题
error:是由代码异常引起的,它可以产生于测试代码本身的错误,也可以是被测试代码中隐藏的bug

一些常用的注解

@Test:将一个普通方法修饰成一个测试方法
@Test(excepted=xx.class): xx.class表示异常类,表示测试的方法抛出此异常时,认为是正常的测试通过的
@Test(timeout=毫秒数) :测试方法执行时间是否符合预期
@BeforeClass: 会在所有的方法执行前被执行,static方法
@AfterClass:会在所有的方法执行之后进行执行,static方法
@Before:会在每一个测试方法被运行前执行一次
@After:会在每一个测试方法运行后被执行一次
@Ignore:所修饰的测试方法会被测试运行器忽略
@RunWith:可以更改测试运行器org.junit.runner.Runner
Parameters:参数化注解

 /**
     * 测试规范点:
     * 1、测试方法必须使用@Test注解,并且方法必须是public void,不能带任何参数;
     * 2、测试单元中的每个方法必须可以独立,测试方法之间不能有任何的依赖;
     * 3、测试方法一般使用test作为方法名的前缀
     */
    @Test
    public void testAdd() {
         //调用所需要测试的函数
         //真实值
         int result=calculate.add(10, 20);
         //期望值
         int expect=30;
         //断言
         //此处 0 代表的是误差值,当expect与result相差的绝对值小于这个值时测试通过。但大于等于时会失败。
         assertEquals(expect, result, 0);
    }

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,830评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,992评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,875评论 0 331
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,837评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,734评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,091评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,550评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,217评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,368评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,298评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,350评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,027评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,623评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,706评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,940评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,349评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,936评论 2 341

推荐阅读更多精彩内容