• TDD示例


    参考文档:
    码农翻身-从零开始造Spring 中的《介绍TDD开发方式, 重构的方法》

    TDD的流程是:
    写一个测试用例->运行:失败->写Just enough的代码,让测试通过->重构代码保持测试通过,然后循环往复。

    下面,我们通过一个简单的例子来说明TDD的流程

    需求:写一个方法,返回小于给定值max的所有素数组成的数组

    public static int[] getPrimes(int max);
    

    先做一个简单的任务分解

    • 边界条件:getPrimes(0) getPrimes(-1) getPrimes(2)应该返回什么?
    • 正常输入:getPrimes(9) getPrimes(17) getPrimes(30)

    首先,要创建一个测试类
    PrimeTest

    import org.junit.Assert;
    import org.junit.Test;
    
    public class PrimeUtilTest {
    
        @Test
        public void getPrimes() {
            int[] expected = new int[]{};
            Assert.assertArrayEquals(expected, PrimeUtil.getPrimes(0));
            Assert.assertArrayEquals(expected, PrimeUtil.getPrimes(-1));
            Assert.assertArrayEquals(expected, PrimeUtil.getPrimes(2));
        }
    }
    

    运行这个测试用例,显示测试失败:
    image.png
    然后实现刚好满足需求的这部分代码

    public class PrimeUtil {
    
        public static int[] getPrimes(int max) {
            if (max == 0 || max == -1 || max == 2) {
                return new int[]{};
            }
            return null;
        }
    }
    

    重新运行测试用例,测试通过
    image.png

    然后增加测试方法

     @Test
        public void getPrimes2() {
            Assert.assertArrayEquals(new int[]{2, 3, 5, 7}, PrimeUtil.getPrimes(9));
            Assert.assertArrayEquals(new int[]{2, 3, 5, 7, 11, 13}, PrimeUtil.getPrimes(17));
            Assert.assertArrayEquals(new int[]{2, 3, 5, 7, 11, 13, 17, 19, 23, 29}, PrimeUtil.getPrimes(30));
        }
    

    运行这个测试,报错
    image.png
    然后再实现满足这个测试用例的方法

    public class PrimeUtil {
    
        public static int[] getPrimes(int max) {
            if (max <= 2) {
                return new int[]{};
            }
            int[] newArray = new int[max];
            int size = 0, k= 0;
            for (int i = 2  ; i < max; i++) {
                for ( k = 2  ; k < i/2+1; k++) {
                    if(i%k ==0) {
                        break;
                    }
                }
                if (k == i / 2+1){
                    newArray[size++] = i;
                }
            }
            newArray = Arrays.copyOf(newArray,size);
            return newArray;
        }
    }
    

    再次运行单元测试,测试通过
    image.png
    最后,重构getPrimes方法

    public static int[] getPrimes(int max) {
            if (max <= 2) {
                return new int[]{};
            }
            int[] primes = new int[max];
            int count = 0, j = 0;
            for (int num = 2; num < max; num++) {
                if (isPrime(num)) {
                    primes[count++] = num;
                }
            }
            primes = Arrays.copyOf(primes, count);
            return primes;
        }
    
        private static boolean isPrime(int num) {
            int i ;
            for (i = 2; i < num / 2 + 1; i++) {
                if (num % i == 0) {
                    return false;
                }
            }
            if (i == num / 2 + 1) {
                return true;
            }
            return false;
        }
    

    重新运行单元测试,测试通过
    image.png

    源码:
    Github
    Gitee

  • 相关阅读:
    WebView加载URL跳转到系统浏览器的解决方法
    WebView 显示网页
    Android权限 uses-permission
    用android studio创建第一个安卓程序加载html5 页面
    html5-补充知识
    Web存储使用详解(本地存储、会话存储)
    sikuli
    java学习_文件工具类
    java学习___File类的查看和删除
    出现java.lang.NoClassDefFoundError: com/google/common/base/Charsets异常错误
  • 原文地址:https://www.cnblogs.com/greyzeng/p/13337183.html
走看看 - 开发者的网上家园