欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

TDD实践

程序员文章站 2022-07-13 09:54:31
...

什么是TDD

TDD(Test-Driven Development)测试驱动开发,是敏捷开发中的一项核心实践和技术,也是软件开发过程中的应用方法。TDD的原理是在开发功能代码之前,先编写单元测试用例代码,由测试代码确定需要编写什么产品代码。

基本思路

通过测试来推动整个开发的进行,拿到需求之后,分析需求,列出测试点,然后写测试用例,为了使测试用例通过而编写功能代码,通过不断的迭代,使整个功能逐步完善。

TDD实践

TDD原则

独立性:用例各自独立,不相互依赖;
小步快跑:每次编写功能代码时,只为满足当前测试用例,这样做能有效降低实现功能的复杂度;
及时重构:测试用例通过之后,对结构不合理,重复的代码,应该及时进行代码重构。

需求
校验字符串str是否满足以下条件,校验通过返回true,校验失败分别提示错误信息
str不能为空
str必须包含特殊字符@
str长度为6-8位
分析需求后,我们将开始用测试驱动开发的模式实现此功能

StrTest.java

import static org.junit.Assert.*;

import org.junit.Test;

/**
 * @see 2018年8月22日下午8:49:08
 */

public class StrTest {

    /**
     * 测试用例1:字符串为空
     */
    @Test
    public void test01() {
        try {
            StrService strSer = new StrService();
            String str = "";
            strSer.checkStr(str);
        } catch (Exception e) {
            assertTrue(e.getMessage().equals("不能为空"));
        }
    }

    /**
     * 测试用例2:字符串必须包含'_'特殊符号
     */
    @Test
    public void test02() {
        try {
            StrService strSer = new StrService();
            String str = "2wew";
            boolean res = strSer.checkStr(str);
            assertTrue(!res);
        } catch (Exception e) {
            assertTrue(e.getMessage().equals("必须包含特殊符号'_'"));
        }
    }

    /**
     * 测试用例3:字符串长度必须是6-8
     */
    @Test
    public void test03() {
        try {
            StrService strSer = new StrService();
            String str = "2w_ew";
            boolean res = strSer.checkStr(str);
            assertTrue(!res);
        } catch (Exception e) {
            assertTrue(e.getMessage().equals("长度必须是6-8位"));
        }
    }

    /**
     *     测试用例4:满足所有条件,测试通过
     */
    @Test
    public void test04() {
        try {
            StrService strSer = new StrService();
            String str = "2w34_ew";
            boolean res = strSer.checkStr(str);
            assertTrue(res);
        } catch (Exception e) {
            assertTrue(e.getMessage().equals(""));
        }
    }
}

StrService.class 代码如下

/**
* @see 2018年8月22日下午8:50:18
*/

public class StrService {

/**
 * 实现对字符串的校验
 * @param str
 * @throws Exception 
 */
public boolean checkStr(String str) throws Exception {
    if(str.equals("")) {
        throw new Exception("不能为空");
    }
    if(!str.contains("_")) {
        throw new Exception("必须包含特殊符号'_'");
    }
    if(str.length()<6||str.length()>8) {
        throw new Exception("长度必须是6-8位");
    }
    return true;
}

}
“`