• 随机四则运算的单元测试5.1


    进行单元测试步骤:

    第一步:将所有的运算分类情况封装在Calculator类中:

    import java.math.BigDecimal;
    import java.text.DecimalFormat;
    public class Calculator{
            long sum;
            char a[]={'+','-','×','÷'};
            char b[]={'+','-','×','÷'};
            public void IntegerandInteger(int b,int c,int d){
                if(a[b]==a[0])
                {
                    sum=c+d;
                }
                else if(a[b]==a[1])
                {
                    sum=c-d;
                }
                else if(a[b]==a[2])
                {
                    sum=c*d;
                }
                else if(a[b]==a[3])
                {
                    sum=(long) ((float)c/d);
                }
            }
            public void Integerandfraction(int b,int c,int d,int f){
                if(a[b]==a[0])
                {
                    sum=(long) (c+(float)f/d);
                }
                else if(a[b]==a[1])
                {
                    sum=(long) (c-(float)f/d);
                }
                else if(a[b]==a[2])
                {
                    sum=(long) (c*((float)f/d));
                }
                else if(a[b]==a[3])
                {
                    sum=(long) ((float)c/((float)f/d));
                }
            }
            public void fractionandfraction(int b,int c,int d,int g,int f){
                if(a[b]==a[0])
                {
                    sum=(long) ((float)d/c+(float)g/f);
                }
                else if(a[b]==a[1])
                {
                    sum=(long) ((float)d/c-(float)g/f);
                }
                else if(a[b]==a[2])
                {
                    sum=(long) (((float)d/c)*((float)g/f));
                }
                else if(a[b]==a[3])
                {
                    sum=(long) (((float)d/c)/((float)g/f));
                }
            }
            public void twoIntegerandfraction(int c,int d,int f,int g,int h,int l){
                if(a[c]==a[0])
                {
                    if(b[d]==b[0])
                    {
                        sum=(long) (f+g+(float)l/h);
                    }
                    else if(b[d]==b[1])
                    {
                        sum=(long) (f+g-(float)l/h);
                    }
                    else if(b[d]==b[2])
                    {
                        sum=(long) (f+g*((float)l/h));
                    }
                    else if(b[d]==b[3])
                    {
                        sum=(long) (f+(float)g/((float)l/h));
                    }
                }
                else if(a[c]==a[1])
                {
                    if(b[d]==b[0])
                    {
                        sum=(long) (f-g+(float)l/h);
                    }
                    else if(b[d]==b[1])
                    {
                        sum=(long) (f-g-(float)l/h);
                    }
                    else if(b[d]==b[2])
                    {
                        sum=(long) (f-g*((float)l/h));
                    }
    
                    else if(b[d]==b[3])
                    {
                        sum=(long) (f-(float)g/((float)l/h));
                    }
                }
                else if(a[c]==a[2])
                {
                    if(b[d]==b[0])
                    {
                        sum=(long) (f*g+(float)l/h);
                    }
                    else if(b[d]==b[1])
                    {
                        sum=(long) (f*g-(float)l/h);
                    }
                    else if(b[d]==b[2])
                    {
                        sum=(long) (f*g*((float)l/h));
                    }
                    else if(b[d]==b[3])
                    {
                        sum=(long) ((float)f*g/((float)l/h));
                    }
                }
                else if(a[c]==a[3])
                {
                    if(b[d]==b[0])
                    {
                        sum=(long) ((float)f/g+(float)l/h);
                    }
                    else if(b[d]==b[1])
                    {
                        sum=(long) ((float)f/g-(float)l/h);
                    }
                    else if(b[d]==b[2])
                    {
                        sum=(long) ((float)f/g*((float)l/h));
                    }
                    else if(b[d]==b[3])
                    {
                        sum=(long) ((float)f/g/((float)l/h));
                    }
                }
            }
            public void allfraction(int c,int d,int f,int g,int h,int l,int s,int p){
                if(a[c]==a[0])
                {
                    if(b[d]==b[0])
                    {
                        sum=(long) ((float)g/f+(float)l/h+(float)p/s);
                    }
                    else if(b[d]==b[1])
                    {
                        sum=(long) ((float)g/f+(float)l/h-(float)p/s);
                    }
                    else if(b[d]==b[2])
                    {
                        sum=(long) ((float)g/f+((float)l/h)*((float)p/s));
                    }
                    else if(b[d]==b[3])
                    {
                        sum=(long) ((float)g/f+((float)l/h)/((float)p/s));
                    }
                }
                else if(a[c]==a[1])
                {
                    if(b[d]==b[0])
                    {
                        sum=(long) ((float)g/f-(float)l/h+(float)p/s);
                    }
                    else if(b[d]==b[1])
                    {
                        sum=(long) ((float)g/f-(float)l/h-(float)p/s);
                    }
                    else if(b[d]==b[2])
                    {
                        sum=(long) ((float)g/f-((float)l/h)*((float)p/s));
                    }
                    else if(b[d]==b[3])
                    {
                        sum=(long) ((float)g/f-((float)l/h)/((float)p/s));
                    }
                }
                else if(a[c]==a[2])
                {
                    if(b[d]==b[0])
                    {
                        sum=(long) (((float)g/f)*((float)l/h)+(float)p/s);
                    }
                    else if(b[d]==b[1])
                    {
                        sum=(long) (((float)g/f)*((float)l/h)-(float)p/s);
                    }
                    else if(b[d]==b[2])
                    {
                        sum=(long) (((float)g/f)*((float)l/h)*((float)p/s));
                    }
                    else if(b[d]==b[3])
                    {
                        sum=(long) (((float)g/f)*((float)l/h)/((float)p/s));
                    }
                }
                else if(a[c]==a[3])
                {
                    if(b[d]==b[0])
                    {
                        sum=(long) (((float)g/f)/((float)l/h)+(float)p/s);
                    }
                    else if(b[d]==b[1])
                    {
                        sum=(long) (((float)g/f)/((float)l/h)-(float)p/s);
                    }
                    else if(b[d]==b[2])
                    {
                        sum=(long) (((float)g/f)/((float)l/h)*((float)p/s));
                    }
                    else if(b[d]==b[3])
                    {
                        sum=(long) (((float)g/f)/((float)l/h)/((float)p/s));
                    }
                }
            }
            public void allInteger(int c,int d,int f,int g,int h){
                if(a[c]==a[0])
                {
                    if(b[d]==b[0])
                    {
                        sum=f+g+h;
                    }
                    else if(b[d]==b[1])
                    {
                        sum=f+g-h;
                    }
                    else if(b[d]==b[2])
                    {
                        sum=f+g*h;
                    }
                    else if(b[d]==b[3])
                    {
                        sum=(long) (f+(float)g/h);
                    }
                }
                else if(a[c]==a[1])
                {
                    if(b[d]==b[0])
                    {
                        sum=f-g+h;
                    }
                    else if(b[d]==b[1])
                    {
                        sum=f-g-h;
                    }
                    else if(b[d]==b[2])
                    {
                        sum=f-g*h;
                    }
    
                    else if(b[d]==b[3])
                    {
                        sum=(long) (f-(float)g/h);
                    }
                }
                else if(a[c]==a[2])
                {
                    if(b[d]==b[0])
                    {
                        sum=f*g+h;
                    }
                    else if(b[d]==b[1])
                    {
                        sum=f*g-h;
                    }
                    else if(b[d]==b[2])
                    {
                        sum=f*g*h;
                    }
                    else if(b[d]==b[3])
                    {
                        sum=(long) ((float)f*g/h);
                    }
                }
                else if(a[c]==a[3])
                {
                    if(b[d]==b[0])
                    {
                        sum=(long) ((float)f/g+h);
                    }
                    else if(b[d]==b[1])
                    {
                        sum=(long) ((float)f/g-h);
                    }
                    else if(b[d]==b[2])
                    {
                        sum=(long) ((float)f/g*h);
                    }
                    else if(b[d]==b[3])
                    {
                        sum=(long) ((float)f/g/h);
                    }
                }
            }
            public void Integerandtwofraction(int c,int d,int f,int g,int h,int l,int s){
                if(a[c]==a[0])
                {
                    if(b[d]==b[0])
                    {
                        sum=(long) (f+(float)h/g+(float)s/l);
                    }
                    else if(b[d]==b[1])
                    {
                        sum=(long) (f+(float)h/g-(float)s/l);
                    }
                    else if(b[d]==b[2])
                    {
                        sum=(long) (f+((float)h/g)*((float)s/l));
                    }
                    else if(b[d]==b[3])
                    {
                        sum=(long) (f+((float)h/g)/((float)s/l));
                    }
                }
                else if(a[c]==a[1])
                {
                    if(b[d]==b[0])
                    {
                        sum=(long) (f-(float)h/g+(float)s/l);
                    }
                    else if(b[d]==b[1])
                    {
                        sum=(long) (f-(float)h/g-(float)s/l);
                    }
                    else if(b[d]==b[2])
                    {
                        sum=(long) (f-((float)h/g)*((float)s/l));
                    }
                    else if(b[d]==b[3])
                    {
                        sum=(long) (f-((float)h/g)/((float)s/l));
                    }
                }
                else if(a[c]==a[2])
                {
                    if(b[d]==b[0])
                    {
                        sum=(long) (f*((float)h/g)+(float)s/l);
                    }
                    else if(b[d]==b[1])
                    {
                        sum=(long) (f*((float)h/g)-(float)s/l);
                    }
                    else if(b[d]==b[2])
                    {
                        sum=(long) (f*((float)h/g)*((float)s/l));
                    }
                    else if(b[d]==b[3])
                    {
                        sum=(long) (f*((float)h/g)/((float)s/l));
                    }
                }
                else if(a[c]==a[3])
                {
                    if(b[d]==b[0])
                    {
                        sum=(long) (f/((float)h/g)+(float)s/l);
                    }
                    else if(b[d]==b[1])
                    {
                        sum=(long) (f/((float)h/g)-(float)s/l);
                    }
                    else if(b[d]==b[2])
                    {
                        sum=(long) (f/((float)h/g)*((float)s/l));
                    }
                    else if(b[d]==b[3])
                    {
                        sum=(long) (f/((float)h/g)/((float)s/l));
                    }
                }
            }
            public long getSum(){
                return sum;
            }
    }

    第二步:将JUnit4单元测试包引入这个项目中

    第三步,生成JUnit测试框架,之后系统会自动生成一个新类CalculatorTest,再根据情况完善CalculatorTest类里面的代码,完整的CalculatorTest代码如下:

    import static org.junit.Assert.*;
    import org.junit.Before;
    import org.junit.Test;
    public class CalculatorTest {
        private Calculator calculator=new Calculator();
        @Before
        public void setUp() throws Exception {
        }
    
        @Test
        public void testIntegerandInteger() {
            calculator.IntegerandInteger(0,1,2);
            assertEquals(3, calculator.getSum());
        }
    
        @Test
        public void testIntegerandfraction() {
            calculator.Integerandfraction(0, 1, 2, 4);
            assertEquals(3,calculator.getSum());
        }
    
        @Test
        public void testFractionandfraction() {
            calculator.fractionandfraction(0,3,1,2,3);
            assertEquals(1,calculator.getSum());
        }
    
        @Test
        public void testTwoIntegerandfraction() {
            calculator.twoIntegerandfraction(0, 0, 2, 3, 1, 2);
            assertEquals(7,calculator.getSum());
        }
    
        @Test
        public void testAllfraction() {
            calculator.allfraction(0, 0, 5, 3, 5, 4, 5, 3);
            assertEquals(2,calculator.getSum());
        }
    
        @Test
        public void testAllInteger() {
            calculator.allInteger(0, 0, 3, 4, 5);
            assertEquals(12,calculator.getSum());
        }
    
        @Test
        public void testIntegerandtwofraction() {
            calculator.Integerandtwofraction(0, 0, 3, 5, 2, 5, 3);
            assertEquals(4,calculator.getSum());
        }
    
        @Test
        public void testFactorial() {
            calculator.Factorial(3);
            assertEquals(6,calculator.getSum());
        }
    
    }

    第四步,运行测试代码,结果如下:

    白盒测试与黑盒测试:

    白盒测试:

    IntegerandInteger白盒测试:

    c=4,d=4

    判断

    条件

    结果

    a[b]==a[0]

    8

    a[b]==a[1]

    0

    a[b]==a[2]

    16

    a[b]==a[3]

    1

    上面的白盒演示是整数与整数的两项测试,其余形式两项的白盒测试情况同上。

    twoIntegerandfraction白盒测试:

    f=1,g=3,l=4,h=2

    判断

    一级条件

    二级条件

    结果

    a[c]==a[0]

    b[d]==b[0]

    6

    b[d]==b[1]

    2

    b[d]==b[2]

    8

    b[d]==b[3]

    2

    a[c]==a[1]

    b[d]==b[0]

    0

    b[d]==b[1]

    -4

    b[d]==b[2]

    -4

    b[d]==b[3]

    -1

    a[c]==a[2]

    b[d]==b[0]

    5

    b[d]==b[1]

    1

    b[d]==b[2]

    6

    b[d]==b[3]

    1.5

    a[c]==a[3]

    b[d]==b[0]

    2.33

    b[d]==b[1]

    -1.67

    b[d]==b[2]

    0.67

    b[d]==b[3]

    0.17

    上面的白盒演示是两个整数与一个分数的三项测试,其余形式三项的白盒测试情况同上。

    Factorial白盒测试:

    a=3

    判断

    条件

    结果

    a==0

    1

    a!=0

    6

    上面的白盒演示是阶乘的测试。

    黑盒测试:

    测试内容

    期望结果

    实际结果

    窗口中框中数据非正常输入

    有相应的提示窗口弹出,提示输入错误

    没有窗口弹出提示输入的不规范

    通过黑盒的测试,将原代码进行改进,改进后运行截图如下:

    实验总结:

          本次的实验由于某种原因未能结对完成,这是一个比较遗憾的事情,但是通过本次的实验我却收获了不少。我知道了如何写单元测试以及如何做黑白盒的测试,以后写代码也可以通过本次实验的方法,这样可以使我们的代码更加完善,有关核心算法的出错几率会相应地减少。在单元测试的过程中出现了一些问题,至今还是不明白,例如:为什么返回计算的结果时,如果返回的是double或者float型测试的时候总是提示错误,如果把它改成int或者long型的话就不会出现这个问题。在黑白盒测试的时候,感觉黑盒测试比白盒测试更加好,因为黑盒测试有点像我们的用户,用户根本不知道我们的代码是如何的,他肯定是不按情理出牌的,这样更加有利于我们该软件的完善,对各种情况都可以考虑到,是开发出来的软件更加人性化。

          虽然刚开始做实验的时候觉得无从下手,都有了不想写的念头了,但是通过查阅相关的资料发现,原来单元测试是这么有用的,再一步一步的写下去,才感受到了它的益处,其知道它是和我们做好一个软件息息相关。本次实验真是收获颇丰。

  • 相关阅读:
    tornado web 框架的认识
    JavaScript 作用域知识点梳理
    服务器
    git——学习
    webservice——和API接口
    celery——任务调度模块
    supervisor——进程管理工具
    Python常用的语句
    数据类型比较总结
    字符集和字符编码问题
  • 原文地址:https://www.cnblogs.com/xuegu/p/4469237.html
Copyright © 2020-2023  润新知