zoukankan      html  css  js  c++  java
  • java中如何使用Junit测试

    java中如何使用Junit测试

    一、总结

    一句话总结:a、单元测试的测试代码在test文件夹下,和源码不在同一个文件夹下

    b、测试的类方法都以test开头,后面接要测试的类或者方法的名字

    1、JUnit中什么时候使用assertTrue,assertFalse语句

    true 通过
    false 通过
    assertTrue(boolean condition);

    condition:如果condition结果为true,则通过测试.

    assertFalse(boolean condition);

    condition:如果condition结果为false,则通过测试.

    2、单元测试是什么?

    最小 功能模块 进行测试

    百度百科的解释是这样的:单元测试(模块测试)是开发者编写的一小段代码,用于检验被测代码的一个很小的、很明确的功能是否正确。通常而言,一个单元测试是用于判断某个特定条件(或者场景)下某个特定函数的行为。例如,你可能把一个很大的值放入一个有序list 中去,然后确认该值出现在list 的尾部。或者,你可能会从字符串中删除匹配某种模式的字符,然后确认字符串确实不再包含这些字符了。

         简单的说,单元测试就是对你程序中最小的功能模块进行测试,在c语言里可能是一个函数,java中可能是一个方法或者类。

    目的就是为了提高代码的质量。

    二、java使用Junit测试实例

    参考:

    java如何使用JUnit进行单元测试 - Fench - 博客园
    http://www.cnblogs.com/fench/p/5936008.html

    单元测试是什么?

          百度百科的解释是这样的:单元测试(模块测试)是开发者编写的一小段代码,用于检验被测代码的一个很小的、很明确的功能是否正确。通常而言,一个单元测试是用于判断某个特定条件(或者场景)下某个特定函数的行为。例如,你可能把一个很大的值放入一个有序list 中去,然后确认该值出现在list 的尾部。或者,你可能会从字符串中删除匹配某种模式的字符,然后确认字符串确实不再包含这些字符了。

         简单的说,单元测试就是对你程序中最小的功能模块进行测试,在c语言里可能是一个函数,java中可能是一个方法或者类。

    目的就是为了提高代码的质量。

    junit是什么?

         JUnit是一个Java语言的单元测试框架。它由Kent Beck和Erich Gamma建立,逐渐成为源于Kent Beck的sUnit的xUnit家族中最为成功的一个。 JUnit有它自己的JUnit扩展生态圈。多数Java的开发环境都已经集成了JUnit作为单元测试的工具。

    也就是说junit就是别人写好的单元测试框架,使用此框架你可以大大缩短你的测试时间和准确度(笔者现在还记得大一刚来的的时候,c语言写的小程序,每次都是重启测试,那种编译-输入--停止-编译的苦日子,很痛苦,今天用junit这个单元测试框架好多了)。

     

    注:eclipse已经自带JUnit, JUnit的当前常用版本分为3.X(需要手动添加),4.X(支持注解)

    我的这个版本的eclipse自带JUnit3.X的,本文以JUnit3.x为例进行测试。

    下面以 “求最大子数组之和”的例子,简单的介绍一下单元测试是什么,junit如何入门。

     1 package edu.sau.maximun;
     2 
     3 public class SubArray {
     4   //求两个数中的最大
     5   public int max(int x, int y){
     6       if(x>y)
     7           return x;
     8       else
     9           return y;
    10   }
    11   
    12   //最大子数组之和
    13   public int  maxSubArr(int[] arr){
    14       int sum = arr[0];  //最大值子数组和
    15       int sub_sum = arr[0];//中间值
    16       
    17       for(int i = 1; i<arr.length; i++){
    18           sub_sum = max(arr[i],sub_sum+arr[i] );
    19           sum = max(sub_sum,sum);
    20       }
    21       return sum;
    22   }
    23 }

    以上代码实现了“最大子数组之和”的算法,共有max和maxSubArr两个方法,下面开始测试(重新创建一个新包,取名 test,所有测试都是再这个新包完成)

     1 package edu.sau.maximun.test;
     2 
     3 import edu.sau.maximun.SubArray;
     4 import junit.framework.TestCase;
     5 
     6 public class TestMaximun extends TestCase {
     7     
     8     //对方法max进行测试
     9     public void testMax(){
    10         int x = 1;  //测试数据
    11         int y = 2;
    12         int z = -1;
    13         SubArray  sub = new SubArray();
    14         int result1 = sub.max(x, y);
    15         int result2 = sub.max(y,x);
    16         int result3 = sub.max(z, x);
    17         assertTrue(result1 == y);
    18         assertTrue(result2 == y);
    19         assertTrue(result3 == 1);
    20     }
    21     
    22     //对方法maxSubArr测试
    23     public void testMaxSubArr(){
    24         
    25         int arr1[] ={1,2,3,-1}; //测试用例
    26         int arr2[] = {1,2,-4,8,4,-4,6,-2,1};
    27         int  arr3[] ={-4,-2,-1,-3};
    28         int arr4[] = {-4,2,-4,2,-1};
    29         SubArray sub = new SubArray();
    30         
    31         
    32         assertTrue(sub.maxSubArr(arr1) == 6);
    33         assertTrue(sub.maxSubArr(arr2) == 14);
    34         assertTrue(sub.maxSubArr(arr3) == -1);
    35         assertTrue(sub.maxSubArr(arr4) == 2);
    36     }
    37 }

    整个文件的结构目录如下:

     

    程序单元测试的方法:-右击 测试类->Run as ->JUnit test
     

    运行结果:(Errors:0,Failure:0 说明测试通过,如果出错,Failure是单元测试所期望的错误,说明你的代码结果不满足你的要求,Errors需要你查看系统的配置,检查代码。是不是手动输入快好多?)

     

    说明:

    总结:测试类需要继承junit.framework.TestCase类,测试方法命名需要按照public void TestXXXX格式,通过断言来判断结果的正确行。

    测试范围一定要满足你的所有需求

       以测试testMaxSubArr为例,具体的测试样例及目的如下:  

    用例编号

    用例描述

           输入数据 预期输出数据 通过/不通过 评价
       1 检测能否实现最大数组求和的基本功能(一般情况) 1,2,3,-1 6 通过 程序实现基本功能
    2 最大子数组处于数组中间(一般情况) 1,2,-4,8,4,-4,6,-2,1 14 通过 程序实现基本功能
    3 数组元素均为负数,且第一个元素为最小(特殊情况) -4,-2,-1,-3 -1 通过 程序实现特殊情况的求和
    4 数组中存在最大值相同的多个(>=2)子数组(特殊情况) -4,2,-4,2,-1 2 通过 程序能对多个相同子数组进行保留

    现在大家已经会基本的单元测试,当然这只是非常简单的使用junit,后期我会写一些关于junit的更具体的介绍。

    代码下载地址: https://coding.net/u/fench/p/java-junit/git    

                                                                                                                                                                     

     

  • 相关阅读:
    bzoj 1176 cdq分治套树状数组
    Codeforces 669E cdq分治
    Codeforces 1101D 点分治
    Codeforces 1100E 拓扑排序
    Codeforces 1188D Make Equal DP
    Codeforces 1188A 构造
    Codeforces 1188B 式子转化
    Codeforces 1188C DP 鸽巢原理
    Codeforces 1179D 树形DP 斜率优化
    git commit -m "XX"报错 pre -commit hook failed (add --no-verify to bypass)问题
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/9908462.html
Copyright © 2011-2022 走看看