• [软件测试学习]考虑到测试的代码编写/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内置了异常处理。

  • 相关阅读:
    第39周星期日中秋节杂记
    php array_multisort
    php统计近一周和近30天的用户数据
    什么是CGI、FastCGI、PHPCGI、PHPFPM、SpawnFCGI?
    PHP array_multisort()函数超详细理解
    微博第三方登陆请求授权出现错误码:21322(重定向地址不匹配)的解决方法
    艾伟_转载:C# 反射技术应用 狼人:
    艾伟_转载:HttpApplication的认识与加深理解 狼人:
    艾伟_转载:C# .NET学习经验总结 狼人:
    艾伟_转载:C# 委托的同步调用和异步调用 狼人:
  • 原文地址:https://www.cnblogs.com/RabbitHole/p/4395179.html
Copyright © 2020-2023  润新知