【编程理念】初识TDD(测试驱动开发)思想

-------------------------------------------------------START----------------------------------------------------------------------

今天是2020年元旦,先祝大家新的一年工作顺利;只争朝夕,不负韶华!

好久没更新了,今天分享的主题为:测试驱动开发,简称TDD。

TDD,全称Test-Driven Development,即测试驱动开发,是一种开发方法,不针对个别语言。

引用百度百科:测试驱动开发的基本思想就是在开发功能代码之前,先编写测试代码,然后只编写使测试通过的功能代码,从而以测试来驱动整个开发过程的进行。这有助于编写简洁可用和高质量的代码,有很高的灵活性和健壮性,能快速响应变化,并加速开发过程。

在我看来,TDD不仅有以上提到的优点,还能提高编程的趣味性。

了解了TDD的思想后,下面以一个简单的例子来加深对TDD的理解,及TDD的应用场景。

---------------------SHOW MY CODE--------------------------

下面这段程序的功能:判断字符串是否相等。测试代码为EXPECT_EQ_BASE(equality, expect, actual, formal)和EXPECT_EQ_STR(expect, actual)两个宏,是一个最简单的测试,测试actual接口的结果与expect接口是否相等;代码中actual接口我们简单设置为strcmp()函数,比较两个字符串是否相等,这样便是一个最近的的TDD案例。实际情况中actual接口和expect接口应该更加复杂,这里便不做讨论,只是知道我们测试对象的实际输出结果与期望结果的位置就行,后续自行分析。


#include 
#include 
#include 

#define LEPT_UNEQUAL 0
#define LEPT_EQUAL 1


static int main_ret = 0;
static int test_count = 0;
static int test_pass = 0;


//该宏为基础,统计测试的总数及通过测试的数量
#define EXPECT_EQ_BASE(equality, expect, actual, formal)\
    do {\
        test_count++;\
        if(equality)\
            test_pass++;\
        else {\
            fprintf(stderr, "%s:%d: expect: " formal "  actual: " formal "\n", __FILE__, __LINE__, expect, actual);\
            main_ret = 1;\
        }\
    } while(0)

//该宏调用EXPECT_EQ_BASE,expect为期望值,actual为实际值
#define EXPECT_EQ_STR(expect, actual) EXPECT_EQ_BASE((expect) == (actual) , expect, actual, "%d")

//测试相等的函数下的三个测试
static void test_str_equal() {
    EXPECT_EQ_STR(LEPT_EQUAL, strcmp("aa", "aa") == 0); //LEPT_EQUAL代表期望结果相等
    EXPECT_EQ_STR(LEPT_UNEQUAL, strcmp("aa", "a") == 0); //LEPT_UNEQUAL代表期望结果为不相等
    EXPECT_EQ_STR(LEPT_UNEQUAL, strcmp("aaa", "aaa") == 0);
    //上面的第三个测试不通过
}

static void test() {
    test_str_equal();    //测试相等的函数
 }

int main() {
    test();
    printf("%d/%d (%3.2f%%) passed\n", test_pass, test_count, test_pass * 100.0 / test_count);    //打印出测试不通过的例子的位置
    return main_ret;
}

以上程序运行结果为:

2/3 (66.67%) passed
E:\文件路径\main.c:32: expect: 0  actual: 1

代表共运行了3个测试,2个测试通过,不通过的测试在main.c文件第32行,输入的expect为0  actual:为1

去掉最后一个测试的运行结果为:

2/2 (100.00%) passed

代表运行的俩个测试都通过;

在以上案例中,我们不讨论自行实现的功能代码,而以strcmp作为功能代码的输出接口,主要探讨TDD的概念。

 

以上是个人的见解,如有错误还请大家帮忙指正,谢谢!

 

以上代码参考自Github上的项目“从零开始的 JSON 库教程”中的启程篇,其链接https://github.com/miloyip/json-tutorial

-----------------------------------------------------END-------------------------------------------------------------------

你可能感兴趣的:(编程理念,TDD,测试驱动开发)