zoukankan      html  css  js  c++  java
  • 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    

                                                                                                                                                                     

    package com.fulisha.textjunit;
     
    import static org.junit.Assert.*;
     
    import org.junit.Test;
     
    public class CalculateTest {
     
        @Test
        public void testAdd(){
            assertEquals(6,new Calculate().add(3, 3));
        }
        @Test
        public void testsubstract(){
            assertEquals(2,new Calculate().substract(5, 3));
        }
        @Test
        public void testcheng(){
            assertEquals(15,new Calculate().cheng(5, 3));
        }
        @Test
        public void testchu(){
            assertEquals(2,new Calculate().chu(6, 3));
        }
    }


     

  • 相关阅读:
    [bzoj4241] 历史研究 (分块)
    [tyvj2054] 四叶草魔杖 (最小生成树 状压dp)
    20180710 考试记录
    [luogu2047 NOI2007] 社交网络 (floyed最短路)
    [luogu2081 NOI2012] 迷失游乐园 (树形期望dp 基环树)
    [luogu1600 noip2016] 天天爱跑步 (树上差分)
    [luogu2216 HAOI2007] 理想的正方形 (2dST表 or 单调队列)
    [poj 3539] Elevator (同余类bfs)
    [BZOJ1999] 树网的核 [数据加强版] (树的直径)
    bzoj2301 [HAOI2011]Problem b
  • 原文地址:https://www.cnblogs.com/grj001/p/12223369.html
Copyright © 2011-2022 走看看