四则运算2—单元测试

  思路:编写的程序只有一个主函数,并且每个要求的实现方式都是一层层嵌套的,也都是使用同样的方法,先用while对不符合的输入进行提示,再用if...else...分支结构选择。所以则以(是否有乘除法—是否是否有负数—数值范围—打印方式—输出题目)为单元进行测试。

按照BICEP原则:

Right-结果是否正确?

B-是否所有的边界条件都是正确的?

I-能查一下反向关联吗?

C-能用其他手段交叉检查一下结果吗?

E-你是否可以强制错误条件发生?

P-是否满足性能要求?

源代码:

#include<iostream.h>

#include<stdlib.h>

#include<time.h>

 

int main()

{

       srand(time(NULL));     //题目避免重复

       int value1,value2,op;   //两个整数,运算符

       int amount,mount;       //题目数量

       int erji;               //二级运算,即乘除法

       int number;             //正负数

       int range;              //数值范围

    //定制题目数量

       cout<<"请定制题目的数量(填一个>0的整数):";

       cin>>amount;

       while(amount<=0)

       {

              cout<<"不合法!"<<endl<<"请重新输入(填一个>0的整数):";

              cin>>amount;

       }

    //题目中是否有乘除法

       cout<<"题目中是否有乘除法(填0为是,1为否):";

       cin>>erji;

       while(erji!=0 && erji!=1 )

       {

              cout<<"不合法!"<<endl<<"请重新输入(填0为有乘除法,1为无乘除法):";

              cin>>erji;

       }

       if(erji==0)

       {

        //题目中是否有负数参与运算

              cout<<"题目中是否有负数(填0为是,1为否):";

              cin>>number;

              while(number!=0 && number!=1)

              {

                     cout<<"不合法!"<<endl<<"请重新输入(填0为有负数,1为无负数):";

                     cin>>number;

              }

              if(number==0)

              {

            //题目中参与运算的数值范围

                     cout<<"请输入数值的最小边界(填一个<0的整数):";

                     cin>>range;

                     while(range>=0)

                     {

                            cout<<"不合法!"<<endl<<"请重新输入(填一个<0的整数):";

                            cin>>range;

                     }

                     //打印方式

                     cout<<"每行打印题目的数量(填一个>0的整数):";

                     cin>>mount;

                     while(mount<=0)

                     {

                            cout<<"不合法!"<<endl<<"请重新输入(填一个>0的整数):";

                            cin>>mount;

                     }

            //输出题目

                     cout<<endl<<"共"<<amount<<"道包含乘除法的负数运算(范围:"<<range<<"~0)"<<endl;

                     for(int i=0;i<amount;i++)

                     {

                            cout<<"("<<i+1<<")";

                            value1=rand()%range+range/2;

                            value2=rand()%range+range/2;

                            op=rand()%4;

                            switch(op)

                            {

                            case 0:

                                   cout<<value1<<" + "<<value2<<"="<<"\t\t";      //加

                                   break;

                            case 1:

                                   cout<<value1<<" - "<<value2<<"="<<"\t\t";      //减

                                   break;

                            case 2:

                                   cout<<value1<<" x "<<value2<<"="<<"\t\t";      //乘

                                   break;

                            case 3:

                                   cout<<value1<<" ÷ "<<value2<<"="<<"\t\t";   //除

                                   break;

                            }

                            if((i+1)%mount==0)

                            {

                    cout<<endl;

                }

                     }

              }

              else

              {

 

                     cout<<"请输入数值的最大边界(填一个>0的整数):";

                     cin>>range;

                     while(range<0)

                     {

                            cout<<"不合法!"<<endl<<"请重新输入(填一个>0的整数):";

                            cin>>range;

                     }

                     cout<<"每行打印题目的数量(每行):";

                     cin>>mount;

 

                     cout<<endl<<"共"<<amount<<"道包含乘除法的非负数运算(范围:0~"<<range<<")"<<endl;

                     for(int i=0;i<amount;i++)

                     {

                         cout<<"("<<i+1<<")  ";

                            value1=rand()%range;

                            value2=rand()%range;

                            op=rand()%4;

                            switch(op)

                            {

                            case 0:

                                   cout<<value1<<" + "<<value2<<"="<<"\t\t";      //加

                                   break;

                            case 1:

                                   cout<<value1<<" - "<<value2<<"="<<"\t\t";      //减

                                   break;

                            case 2:

                                   cout<<value1<<" x "<<value2<<"="<<"\t\t";      //乘

                                   break;

                            case 3:

                                   cout<<value1<<" ÷ "<<value2<<"="<<"\t\t";   //除

                                   break;

                            }

                            if((i+1)%mount==0)

                            {

                    cout<<endl;

                }

                     }

              }

       }

       else

       {

 

              cout<<"题目中是否有负数(填0为是,1为否):";

              cin>>number;

              while(number!=0 && number!=1)

              {

                     cout<<"不合法!"<<endl<<"请重新输入(填0为有负数,1为无负数):";

                     cin>>number;

              }

              if(number==0)

              {

 

                     cout<<"请输入数值的最小边界(填一个<0的整数):";

                     cin>>range;

                     while(range>=0)

                     {

                            cout<<"不合法!"<<endl<<"请重新输入(填一个<0的整数):";

                            cin>>range;

                     }

                     cout<<"每行打印题目的数量(每行):";

                     cin>>mount;

 

                     cout<<endl<<"共"<<amount<<"道不包含乘除法的负数运算(范围:"<<range<<"~0)"<<endl;

                     for(int i=0;i<amount;i++)

                     {

                         cout<<"("<<i+1<<")  ";

                            value1=rand()%range+range/2;

                            value2=rand()%range+range/2;

                            op=rand()%2;

                            switch(op)

                            {

                            case 0:

                                   cout<<value1<<" + "<<value2<<"="<<"\t\t";      //加

                                   break;

                            case 1:

                                   cout<<value1<<" - "<<value2<<"="<<"\t\t";      //减

                                   break;

                            }

                            if((i+1)%mount==0)

                            {

                    cout<<endl;

                }

                     }

              }

              else

              {

 

                     cout<<"请输入数值的最大边界(填一个>0的整数):";

                     cin>>range;

                     while(range<0)

                     {

                            cout<<"不合法!"<<endl<<"请重新输入(填一个>0的整数):";

                            cin>>range;

                     }

                     cout<<"每行打印题目的数量(每行):";

                     cin>>mount;

 

                     cout<<endl<<"共"<<amount<<"道不包含乘除法的非负数运算(范围:0~"<<range<<")"<<endl;

                     for(int i=0;i<amount;i++)

                     {

                         cout<<"("<<i+1<<")  ";

                            value1=rand()%range;

                            value2=rand()%range;

                            op=rand()%2;

                            switch(op)

                            {

                            case 0:

                                   cout<<value1<<" + "<<value2<<"="<<"\t\t";      //加

                                   break;

                            case 1:

                                   cout<<value1<<" - "<<value2<<"="<<"\t\t";      //减

                                   break;

                            }

                            if((i+1)%mount==0)

                            {

                    cout<<endl;

                }

                     }

              }

       }

       return 0;

}

  

设计单元测试计划及测试结果:

(0)17、0、1、64、1

这个是完全按照提示的要求输入,得到了预想的结果。

 

 

(1)null、null、null、null、null

全为空,这必然不满足条件,并且我的程序在第一次输入null时不但没有报错,还不能继续执行。找到bug,进行修改。

 

 

(2)0、0、0、0、0

首先题目不能为0,所以会出现提示重新输入;其次是打印方式输入0(即每行0题)不符合常理却没有报错提示,发现bug进行修改。

 

 

修改后

(3)1、0、0、-9、0

出现提示。

 

 

(4)1、1、1、1、1

无规律都取1,也是符合要求的。

 

 

(5)-22、-22、-22、-22、-22

很明显,题目数量不能为负数,有报错提示;是否有乘除法只能有0或1两种情况,故有报错提示;有无负数同理;打印方式也不能每行题目数量为非整数,有报错提示。

 

 

(6)a、b、c、d、e

这些也是不符合要求的输入,应该给出提示。

 

总结:测试数据能让我们发现很多不足,不断修改完善,还提升能力。

转载于:https://www.cnblogs.com/mumulucky/p/4340388.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值