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

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

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

时间: 2024-12-20 22:18:02

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

闰年测试(非法输入的判断)

1. 问题描述: 输入一个年份,判断其是否为闰年,若为非法输入则给出提示 2. 问题分析: 闰年的判断: 1)输入一个年份,若它能被400整除,则它是闰年:若它能被4整除,且它不能被100整除,则它是闰年 由此判断,若它是闰年,则输出“该年是闰年”:否则,则输出“该年不是闰年” 2)若为非法输入,给出提示,则输出“输入不合法” 3. 测试用例: 编号 输入 期望输出 1 2004 该年是闰年 2    2000 该年是闰年 3 1900 该年不是闰年 4 200,. 输入不合法 4. 测试结果:

闰年测试处理非法输入

本周问题为:输入任意年份,判断是否为闰年. 判断是否为闰年,可以通过下面代码实现: public boolean ifLeapYear(int year) { if (year % 400 == 0) return true; else if (year % 100 == 0) return false; else if (year % 4 == 0) return true; else return false; } 然而,输入的年份是保存为string类型的,因此,这时候就要把输入的字符串转

软件测试第四周--闰年问题的非法输入处理

闰年的判断条件: ①.普通年能被4整除且不能被100整除的为闰年.②.世纪年能被400整除的是闰年③.对于数值很大的年份,这年如果能整除3200,并且能整除172800则是闰年.如172800年是闰年,86400年不是闰年 测试用例: 编号 输入 输出 1 2004 此年是闰年 2 2008 此年是闰年 3 2000 此年是闰年 4 1999 此年非闰年 5 1998 此年非闰年 6 -1200 非法输入 基本逻辑:#include<stdio.h>void main(){ int year,

闰年测试和对输入的非法判断

1问题描述 输入一个测试用例,判断输入用例是否为闰年 2方法使用 这里用到两个函数方法第一个方法由于都在if语句中判断,所以不好测试,第二个方法可以更加明确的判断 3具体代码 #include<stdio.h> #include<sstream> #include<string> using namespace std; void judge(int year){ bool b; if (year % 4 == 0) b=true; if (year % 100 ==

关于软件测试(4):闰年输入的判断以及非法输入的处理测试

针对这周的软件测试课程,讲解了非法输入的不正当处理会对程序造成不必要的损失,因此通过简单的闰年检测程序来处理关于闰年测试的非法输入. 一.需求分析 要求输入框输入年份,点击按钮,出现提示.并能有效的处理任何输入 二.测试用例 内容 取值 预期结果 被400整除 2000 是闰年 被100整除但不被400整除 1900 不是闰年 被4整除且不被100整除 1904 是闰年 不被4整除 1901 不是闰年 非数字字符 abc 非法输入 负数 -1234 非法输入 小数 2000.5 非法输入 空字符

【软件测试】考虑闰年问题中的非法输入

问题提出 在上一篇中提到了闰年问题的实现以及测试,但是在上篇中并没有提及输入框中如果输入非法输入会发生什么问题 观察如下,当我们在输入框中输入"ab"时: 会出现下面java.lang.NumberFormatException: java.lang.NumberFormatException: For input string: "ab" at java.lang.NumberFormatException.forInputString(Unknown Sourc

闰年测试非法输入的处理 简单安卓app 20150406

在软件测试的课上,老师介绍了闰年测试.闰年测试旨在检测某一年份是否为闰年,计算方式为四年一闰,百年不闰,四百年再闰.使用安卓实现这个小程序. 界面代码如下: 1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="http://schemas.android.com/tools" 3 android:layout_width=&quo

[软件测试学习]考虑到测试的代码编写/int.parse的非法输入—由一个简单的c#闰年检测程序说起

一个简单的C#的闰年检测程序 1.闰年检测的函数编写 当提起检测平年闰年时候,第一反应写出的代码 1 public static bool isLeapYear(int year){ 2 return ((year % 4 == 0 && year % 100 != 0)||(year % 400 == 0)) 3 } 但是这个并不易于测试和出现错后的修改,更改代码如下 1 public static bool isLeapYear(int year){ 2 bool check = ne

JAVA闰年测试与解决非法输入

问题实现 实现一个闰年测试的JAVA代码如下: package leapyear; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTextFi