天天看點

随機四則運算的單元測試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());
    }

}      

第四步,運作測試代碼,結果如下:

随機四則運算的單元測試5.1

白盒測試與黑盒測試:

白盒測試:

IntegerandInteger白盒測試:

随機四則運算的單元測試5.1
當c=4,d=4時
判斷 條件 結果
a[b]==a[0] 8
a[b]==a[1]
a[b]==a[2] 16
a[b]==a[3] 1

上面的白盒示範是整數與整數的兩項測試,其餘形式兩項的白盒測試情況同上。

twoIntegerandfraction白盒測試:

随機四則運算的單元測試5.1
随機四則運算的單元測試5.1
當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]
b[d]==b[3]
a[c]==a[1]
-4
-1
a[c]==a[2] 5
1.5
a[c]==a[3] 2.33
-1.67
0.67
0.17

上面的白盒示範是兩個整數與一個分數的三項測試,其餘形式三項的白盒測試情況同上。

Factorial白盒測試:

随機四則運算的單元測試5.1
當a=3時
a==0
a!=0

上面的白盒示範是階乘的測試。

黑盒測試:

測試内容 期望結果 實際結果
視窗中框中資料非正常輸入 有相應的提示視窗彈出,提示輸入錯誤 沒有視窗彈出提示輸入的不規範

通過黑盒的測試,将原代碼進行改進,改進後運作截圖如下:

随機四則運算的單元測試5.1

實驗總結:

      本次的實驗由于某種原因未能結對完成,這是一個比較遺憾的事情,但是通過本次的實驗我卻收獲了不少。我知道了如何寫單元測試以及如何做黑白盒的測試,以後寫代碼也可以通過本次實驗的方法,這樣可以使我們的代碼更加完善,有關核心算法的出錯幾率會相應地減少。在單元測試的過程中出現了一些問題,至今還是不明白,例如:為什麼傳回計算的結果時,如果傳回的是double或者float型測試的時候總是提示錯誤,如果把它改成int或者long型的話就不會出現這個問題。在黑白盒測試的時候,感覺黑盒測試比白盒測試更加好,因為黑盒測試有點像我們的使用者,使用者根本不知道我們的代碼是如何的,他肯定是不按情理出牌的,這樣更加有利于我們該軟體的完善,對各種情況都可以考慮到,是開發出來的軟體更加人性化。

      雖然剛開始做實驗的時候覺得無從下手,都有了不想寫的念頭了,但是通過查閱相關的資料發現,原來單元測試是這麼有用的,再一步一步的寫下去,才感受到了它的益處,其知道它是和我們做好一個軟體息息相關。本次實驗真是收獲頗豐。