MyEclipse如何编写JUnit测试类

来源:互联网 发布:什么软件可以套花呗 编辑:程序博客网 时间:2024/06/10 20:44

最近在看《敏捷软件开发》,看到第31的有关于编写测试类测试一个素数生成器的例子,特此动手实践了下,发现了书中的一个小错误,同时在网上看到一个更好的测试方法。

版本一

//这是书上版本一public class GeneratePrimes {    public static int[] generatePrimes(int maxValue){        if(maxValue >=2){            int s = maxValue+1;            boolean[] f = new boolean[s];            int i;            for(i=0;i<s;i++){                f[i]=true;            }            f[0]=f[1]=false;            int j;            for(i=2;i<Math.sqrt(s)+1;i++){                for(j=2*i;j<s;j+=i)                    f[j] = false;            }            int count=0;            for(i=0;i<s;i++){                if(f[i])                    count++;            }            int[] primes = new int[count];            for(i=0,j=0;i<s;i++){                if(f[i])                    primes[j++]=i;            }            return primes;        }        else {            return new int[0];        }    }}

版本二

//这是书上版本二public class PrimeGenerator {    private static int s;//这里书上是a,很明显错了    private static boolean[] f;    private static int[] primes;    public static int[] generatePrimes(int maxValue){        if(maxValue<2){            return new int[0];        }else{            initializeSieve(maxValue);            sieve();            loadPrimes();            return primes;        }    }    private static void loadPrimes() {        int i;        int j;        int count = 0;        for(i=0;i<s;i++){            if(f[i]){                count++;            }        }        primes = new int[count];        for(i=0,j=0;i<s;i++){            if(f[i]){                primes[j++]=i;            }        }    }    private static void sieve() {        int i;        int j;        for(i=2;i<Math.sqrt(s)+1;i++){            if(f[i]){                for(j=2*i;j<s;j+=i){                    f[j]=false;                }            }        }    }    private static void initializeSieve(int maxValue) {        s=maxValue+1;        f=new boolean[s];        int i;        for(i=0;i<s;i++){            f[i]=true;        }        f[0]=f[1]=false;    }}

书上的测试类

测试类,书上的测试PrimeGenerator的,顺着写就好

import junit.framework.TestCase;import junit.textui.TestRunner;public class TestGeneratePrimes2 extends TestCase {    public static void main(String[] args) {        TestRunner.main(new String[]{"TestGeneratePrimes"});    }    public TestGeneratePrimes2(String name){        super(name);    }    public void testPrimes(){        int[] nullArray = PrimeGenerator.generatePrimes(0);        assertEquals(nullArray.length, 0);        int[] minArray = PrimeGenerator.generatePrimes(2);        assertEquals(minArray.length, 1);        assertEquals(minArray[0], 2);        int[] threeArray = PrimeGenerator.generatePrimes(3);        assertEquals(threeArray.length, 2);        assertEquals(threeArray[0], 2);        assertEquals(threeArray[1], 3);        int[] centArray = PrimeGenerator.generatePrimes(100);        assertEquals(centArray.length, 25);        assertEquals(centArray[24], 97);    }}

我自己写的测试类

测试类,我自己写来测试GeneratePrimes的
这里写图片描述

这里写图片描述

import static org.junit.Assert.*;import org.junit.Test;public class TestGeneratePrimes {    @Test    public void test() {        int[] nullArray = GeneratePrimes.generatePrimes(0);        assertEquals(nullArray.length, 0);        int[] minArray = GeneratePrimes.generatePrimes(2);        assertEquals(minArray.length, 1);        assertEquals(minArray[0], 2);        int[] threeArray = GeneratePrimes.generatePrimes(3);        assertEquals(threeArray.length, 2);        assertEquals(threeArray[0], 2);        assertEquals(threeArray[1], 3);        int[] centArray = GeneratePrimes.generatePrimes(100);        assertEquals(centArray.length, 25);        assertEquals(centArray[24], 97);    }}

可以发现代码明显少了很多。

或者这样

import static org.junit.Assert.*;import org.junit.Test;public class TestGeneratePrimes {    @Test    public void testNull() {        int[] nullArray = GeneratePrimes.generatePrimes(0);        assertEquals(nullArray.length, 0);    }    @Test    public void testMin(){        int[] minArray = GeneratePrimes.generatePrimes(2);        assertEquals(minArray.length, 1);        assertEquals(minArray[0], 2);    }    @Test    public void testThree(){        int[] threeArray = GeneratePrimes.generatePrimes(3);        assertEquals(threeArray.length, 2);        assertEquals(threeArray[0], 2);        assertEquals(threeArray[1], 3);    }    @Test    public void testCent(){        int[] centArray = GeneratePrimes.generatePrimes(100);        assertEquals(centArray.length, 25);        assertEquals(centArray[24], 97);    }}

这里写图片描述

测试结果看着也很清爽。

就是酱紫。