最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言實現(xiàn)單元測試的示例詳解

 更新時間:2022年09月02日 15:03:24   作者:胡安民-獨行者  
單元測試(unit testing),是指對軟件中的最小可測試單元進(jìn)行檢查和驗證。這篇文章主要為大家介紹了C語言實現(xiàn)單元測試的方法,需要的可以參考一下

前沿

單元測試(unit testing),是指對軟件中的最小可測試單元進(jìn)行檢查和驗證。對于單元測試中單元的含義,一般來說,要根據(jù)實際情況去判定其具體含義,如C語言中單元指一個函數(shù),Java里單元指一個類,圖形化的軟件中可以指一個窗口或一個菜單等??偟膩碚f,單元就是人為規(guī)定的最小的被測功能模塊。單元測試是在軟件開發(fā)過程中要進(jìn)行的最低級別的測試活動,軟件的獨立單元將在與程序的其他部分相隔離的情況下進(jìn)行測試。

在網(wǎng)上找了找C語言都沒有類似java 的junit單元測試 ,反復(fù)測試自己寫的模塊非常費勁,特別是交叉模塊測試的時候根本就無法弄

因為一個程序只允許一個main方法,如果其他地方存在了,那么就會報錯,這就導(dǎo)致了測完A模塊想要測試B模塊就需要把A模塊測試的相關(guān)內(nèi)容刪除,這樣會出現(xiàn)什么問題呢? 如果后期我們對A模塊的內(nèi)容進(jìn)行了修改,那么是不是需要在重新寫一套測試Demo, 這樣非常浪費時間和精力 ,沒辦法只能自己開發(fā)一套類似的,來協(xié)助本地開發(fā)進(jìn)行測試代碼

使用前提

自己必須有集合數(shù)據(jù)結(jié)構(gòu)和hash結(jié)構(gòu)

測試框架如下

#ifndef STUDY_TESTCORE_H
#define STUDY_TESTCORE_H
#include "../structure/charHash.h"
typedef int boolean;//定義一個布爾類型
#define TRUE 1
#define FALSE 0
#define EXECUTE_TEST_RUN_METHOD(method) void (*testMethod)() = method;testMethod();
typedef  struct testCore{
    HashMap *methodAll;      // 方法集合
    HashMap *methodAllState; //方法狀態(tài)

} TestCore;
extern  TestCore *testCore;
void   test_Run_MethodAll(void (*initMethod)());
void test_Run_Method(char *methodName,void (*initMethod)());
void addTestMethodName( char *methodName,void *method,boolean state) ;

#endif //STUDY_TESTCORE_H
#include "testcore.h"
#include "malloc.h"
#include "string.h"
TestCore *testCore = NULL;
//創(chuàng)建一個測試環(huán)境
TestCore *createTestCore() {
    TestCore *testCore = (TestCore *) malloc(sizeof(TestCore));
    testCore->methodAll = createHashMap(200);
    testCore->methodAllState = createHashMap(200);
    return testCore;
}
/**
 *
 * @param hash
 * @param methodName   方法名
 * @param method     需要運行的方法
 * @param state     方法狀態(tài)TRUE啟用 FALSE禁用
 */
void addTestMethodName( char *methodName,void *method,boolean state) {
    if(testCore == NULL) {
        testCore = createTestCore();
    }
    putHashMap(testCore->methodAll, methodName,method);
    putHashMap(testCore->methodAllState, methodName,state);
}


/**
 * 運行指定的測試方法
 * @param methodName
 * @param initMethod
 */
void test_Run_Method(char *methodName,void (*initMethod)()) {
    initMethod();//初始化方法
    void *method = getHashMap(testCore->methodAll, methodName);
    if(method != NULL) {
        EXECUTE_TEST_RUN_METHOD(method)
    }
}
/**
 * 運行所有的測試方法,如果方法狀態(tài)為FALSE則跳過
 * @param initMethod
 */
void   test_Run_MethodAll(void (*initMethod)()) {
    initMethod();//初始化方法
    HashMapIterator *pIterator = createHashMapIterator(testCore->methodAllState);
    while(hasNextHashMapIterator(pIterator)) {
        CharKvLinkedNode *pNode = nextHashMapIterator(pIterator);
       if(pNode->value == (void *)TRUE) {
           void *method = getHashMap(testCore->methodAll, pNode->key);
           EXECUTE_TEST_RUN_METHOD(method)
       }
    }
}

測試方法編寫文件

注意: 測試文件的方法名稱不要一樣,否則后面會把前面的給頂替了

#ifndef STUDY_TESTMETHOD_H
#define STUDY_TESTMETHOD_H
#include "testcore.h"
void initMethod();
#endif //STUDY_TESTMETHOD_H
#include <stdio.h>
#include "testmethod.h"

void  test_1(){
    printf("test_1\n");
}
void  test_2(){
    printf("test_2\n");
}
void initMethod(){
    addTestMethodName("test_1",test_1,TRUE);
    addTestMethodName("test_2",test_2,TRUE);
}

驗證

#include <stdio.h>
#include "unittest/testcore.h"
#include "unittest/testmethod.h"
int main() {
    printf("==============test_Run_MethodAll=============\n");
    //批量測試
    test_Run_MethodAll(initMethod);
    printf("==============test_Run_Method=============\n");
    //點對點測試
    test_Run_Method("test_1",initMethod);
    return (0);
}

現(xiàn)在我就能隨心所欲的測試了,想測試那個模塊就測試那個模塊,而且還可批量測試

到此這篇關(guān)于C語言實現(xiàn)單元測試的示例詳解的文章就介紹到這了,更多相關(guān)C語言單元測試內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解C語言#define預(yù)處理宏定義

    詳解C語言#define預(yù)處理宏定義

    本文主要介紹了C語言#define預(yù)處理宏定義,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • c語言中使用BF-KMP算法實例

    c語言中使用BF-KMP算法實例

    這篇文章主要介紹了c語言中使用BF-KMP算法,大家參考使用
    2013-11-11
  • C++單例模式的懶漢模式和餓漢模式詳解

    C++單例模式的懶漢模式和餓漢模式詳解

    這篇文章主要為大家詳細(xì)介紹了C++懶漢模式和餓漢模式,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • 使用UDP協(xié)議實現(xiàn)單詞翻譯服務(wù)器

    使用UDP協(xié)議實現(xiàn)單詞翻譯服務(wù)器

    這篇文章主要為大家詳細(xì)介紹了如何使用UDP協(xié)議實現(xiàn)英文單詞翻譯服務(wù)器,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價值,感興趣的小伙伴可以了解下
    2023-08-08
  • 詳解C++11中模板的優(yōu)化問題

    詳解C++11中模板的優(yōu)化問題

    這篇文章主要介紹了C++11中模板的優(yōu)化問題,通過實例代碼得出結(jié)論,當(dāng)所有模板參數(shù)都有默認(rèn)參數(shù)時,函數(shù)模板的調(diào)用如同一個普通函數(shù),具體示例代碼跟隨小編一起看看吧
    2021-09-09
  • ubuntu系統(tǒng)下C++調(diào)用matlab程序的方法詳解

    ubuntu系統(tǒng)下C++調(diào)用matlab程序的方法詳解

    學(xué)習(xí)c++與matlab混合編程一般是通過c++調(diào)用matlab函數(shù),因為matlab具有強大的數(shù)學(xué)函數(shù)庫,然而vc++具有界面設(shè)計靈活的優(yōu)點,下面這篇文章主要給大家介紹了關(guān)于在ubuntu系統(tǒng)下C++調(diào)用matlab程序的方法,需要的朋友可以參考下。
    2017-08-08
  • C++鍵盤記錄程序代碼

    C++鍵盤記錄程序代碼

    這篇文章主要介紹了C++鍵盤記錄程序代碼,是Windows應(yīng)用程序開發(fā)中非常實用的功能,該功能也常被一些遠(yuǎn)程操控程序所實用,需要的朋友可以參考下
    2014-10-10
  • win10系統(tǒng)下?VS2019點云庫PCL1.12.0的安裝與配置教程

    win10系統(tǒng)下?VS2019點云庫PCL1.12.0的安裝與配置教程

    點云庫全稱是Point?Cloud?Library(PCL),是一個獨立的、大規(guī)模的、開放的2D/3D圖像和點云處理項目,這篇文章主要介紹了win10系統(tǒng)下?VS2019點云庫PCL1.12.0的安裝與配置,需要的朋友可以參考下
    2022-07-07
  • VS2022設(shè)置編碼方式為utf-8的三種方式小結(jié)

    VS2022設(shè)置編碼方式為utf-8的三種方式小結(jié)

    本文主要介紹了VS2022設(shè)置編碼方式為utf-8的三種方式小結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-09-09
  • C++ LeetCode1812判斷國際象棋棋盤格子顏色

    C++ LeetCode1812判斷國際象棋棋盤格子顏色

    這篇文章主要為大家介紹了C++ LeetCode1812判斷國際象棋棋盤格子顏色, 有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12

最新評論

嘉峪关市| 孟州市| 洛阳市| 昌平区| 安宁市| 宜黄县| 青岛市| 上思县| 乐业县| 克什克腾旗| 鄄城县| 邻水| 沿河| 瑞丽市| 德庆县| 铜陵市| 武夷山市| 南皮县| 鸡泽县| 德令哈市| 巫溪县| 济源市| 广昌县| 五寨县| 宁安市| 江安县| 浦东新区| 施秉县| 靖江市| 绥宁县| 门头沟区| 菏泽市| 环江| 峡江县| 亳州市| 仪陇县| 慈溪市| 嘉兴市| 富顺县| 买车| 盐津县|