关于闰年测试中非法输入的处理

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

        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 = "输入不合法";
                }
由此可见,软件测试中我们必须了解每个函数的用法以及对参数的限制,考虑到各种非法情况,合理运用异常机制,这样才能是程序合理有效,减少测试的开销。

posted @ 2015-04-06 10:20  染指红尘泪  阅读(150)  评论(0编辑  收藏  举报