zoukankan      html  css  js  c++  java
  • 关于闰年测试中非法输入的处理

    在软件测试技术课当中我们进行了关于闰年的测试,闰年的测试方法如下所示:

            public static boolean isLeapYear(int year)
            {
                 if (year % 400 == 0)
                    return true;
                 if (year % 100 == 0)
                    return false;
                 if (year % 4 == 0)
                    return true;
                 return false; 
            }

    因此当我们进行测试时,需要得到一个可供测试的年份,这就要在输入框中输入一个字符串,然后通过

    Integer.parseInt(str)函数将我们输入的字符串转换成对应的Int类型值,然而当我们输入非法的字符时,例如

    Integer.parseInt("abcd")时,程序将会报如下错:

      java.lang.NumberFormatException: For input string: "abcd",

    出现错误的原因我们可以从java.lang.Integer包里查看这个方法的具体说明,部分说明如下:

    1、方法原型:public static int parseInt(String s) throws NumberFormatException

    方法说明:将字符串参数作为有符号的十进制整数进行解析。除了第一个字符可以是用来表示负值的 ASCII 减号 '-' ('u002D') 外,字符串中的字符都必须是十进制数字。返回得到的整数值,就好像将该参数和基数 10 作为参数赋予 parseInt(java.lang.String, int) 方法一样。 

    参数:
    s - 包含要解析的 int 表示形式的 String。 
    返回:
    用十进制参数表示的整数值。 
    抛出: 
    NumberFormatException - 如果字符串不包含可解析的整数。

    2、还有另外一种形式:
    public static int parseInt(String s,int radix)throws NumberFormatException
    方法说明:使用第二个参数指定的基数,将字符串参数解析为有符号的整数。除了第一个字符可以是用来表示负值的 ASCII 减号 '-' ('u002D’)外,字符串中的字符必须都是指定基数的数字(通过 Character.digit(char, int) 是否返回一个负值确定)。返回得到的整数值。 
    如果发生以下任意一种情况,则抛出一个 NumberFormatException 类型的异常: 

    第一个参数为 null 或一个长度为零的字符串。 
    基数小于 Character.MIN_RADIX 或者大于 Character.MAX_RADIX。 
    假如字符串的长度超过 1,那么除了第一个字符可以是减号 '-' ('u002D’) 外,字符串中存在任意不是由指定基数的数字表示的字符。 
    字符串表示的值不是 int 类型的值。 

    示例: 

    parseInt("0", 10) 返回 0
    parseInt("473", 10) 返回 473
    parseInt("-0", 10) 返回 0
    parseInt("-FF", 16) 返回 -255
    parseInt("1100110", 2) 返回 102
    parseInt("2147483647", 10) 返回 2147483647
    parseInt("-2147483648", 10) 返回 -2147483648
    parseInt("2147483648", 10) 抛出 NumberFormatException
    parseInt("99", 8) 抛出 NumberFormatException
    parseInt("Kona", 10) 抛出 NumberFormatException
    parseInt("Kona", 27) 返回 411787

    参数:
    s - 包含要解析的整数表示形式的 String
    radix - 解析 s 时使用的基数。 
    返回:
    使用指定基数的字符串参数表示的整数。 
    抛出: 
    NumberFormatException - 如果 String 不包含可解析的 int。

    因此,我们想要解决非法输入的问题不得不采用try - catch 方法来抛出并捕获异常,

              try{
                    if( isLeap( Integer.parseInt( str ) ) ) {
                        ret = "输入年份为闰年";
                         }
                    else {
                        ret = "输入年份非闰年";
                         }
                }
               catch (Exception e){
                        ret = "输入不合法";
                    }
    由此可见,软件测试中我们必须了解每个函数的用法以及对参数的限制,考虑到各种非法情况,合理运用异常机制,这样才能是程序合理有效,减少测试的开销。

  • 相关阅读:
    ZOJ 1002 Fire Net (火力网)
    UVa OJ 117 The Postal Worker Rings Once (让邮差只走一圈)
    UVa OJ 118 Mutant Flatworld Explorers (变体扁平世界探索器)
    UVa OJ 103 Stacking Boxes (嵌套盒子)
    UVa OJ 110 MetaLoopless Sorts (无循环元排序)
    第一次遇到使用NSNull的场景
    NSURL使用浅析
    从CNTV下载《小小智慧树》
    NSDictionary and NSMutableDictionary
    Category in static library
  • 原文地址:https://www.cnblogs.com/lgc24/p/4395538.html
Copyright © 2011-2022 走看看