随机四则运算的单元测试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型的话就不会出现这个问题。在黑白盒测试的时候,感觉黑盒测试比白盒测试更加好,因为黑盒测试有点像我们的用户,用户根本不知道我们的代码是如何的,他肯定是不按情理出牌的,这样更加有利于我们该软件的完善,对各种情况都可以考虑到,是开发出来的软件更加人性化。

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

 

转载于:https://www.cnblogs.com/xuegu/p/4469237.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值