[软件测试学习]考虑到测试的代码编写/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 = new bool(); 3 check = false; 4 if (year % 4 == 0) 5 check = true; 6 if (year % 100 == 0) 7 check = false; 8 if (year % 400 == 0) 9 check = true; 10 return check; 11 }
2.完整代码和测试结果
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { int year = 3; String years = textBox1.Text; int year = int.Parse(textBox1.Text); if (isLeapYear(year)) label2.Text = year + " is leap year!"; else label2.Text = year + " is not leap year!"; } private void label1_Click(object sender, EventArgs e) { } private void textBox1_TextChanged(object sender, EventArgs e) { } public static bool isLeapYear(int year) { bool check = new bool(); check = false; if (year % 4 == 0) check = true; if (year % 100 == 0) check = false; if (year % 400 == 0) check = true; return check; } private void label2_Click(object sender, EventArgs e) { } } }
测试结果
3.非法输入测试
输入用例: #
结果:
4.用Convert.ToInt/TryParse函数的结果
5.对TryParse的改进
通过如上测试,发现只有int.TryParse没有显示异常,出现了0。为了判断这个0是初始化的year还是函数遇到error后赋值的0。把year的初始值改成了3。结果显示表明是遇到error后该函数会将其赋值为0。
通过查阅资料发现函数返回值是bool类型。于是对代码进行了改动。
1 private void button1_Click(object sender, EventArgs e) 2 { 3 int year = 3; 4 String years = textBox1.Text; 5 bool isNum = Int32.TryParse(years, out year); 6 if (isNum) 7 { 8 if (isLeapYear(year)) 9 label2.Text = year + " is leap year!"; 10 else 11 label2.Text = year + " is not leap year!"; 12 } 13 else label2.Text = "input error!"; 14 }
结果如下:
5.比较与反思
Convert.ToInt32、int.Parse、int.TryParse 都可以将非int数据类型转换为int数据类型,三者各有不同。其中Convert.ToInt32最为强大,可以将多种不同的类型,如byte short string 等转换为int数据类型。int.Parse和int.TryParse差不多,都是将string字符串类型转换为int,区别是int.TryParse内置了异常处理。