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


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

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

  • 相关阅读:
    hostnamectl set-hostname liuge
    java.io.IOException: Could not locate executable nullinwinutils.exe in the Hadoop binaries.
    基于API和SQL的基本操作【DataFrame】
    DataFrame 转换为Dataset
    RDD转换为DataFrame【反射/编程】
    WordCount程序【Spark Streaming版本】
    基于RDD实现简单的WordCount程序
    easyui禁止下拉框
    JavaScript join() 方法
    JavaScript push() 方法
  • 原文地址:https://www.cnblogs.com/lgc24/p/4395538.html
Copyright © 2020-2023  润新知