2010-06-28 42 views
7

我目前正在研究一個代碼庫,它從來沒有寫過任何單元測試。它已被編寫用於16位嵌入式處理器,並且我想開始爲我編寫的所有代碼添加單元測試,至少將其擴展到代碼的其他部分。如何開始爲傳統嵌入式C應用程序編寫單元測試 - 緊密耦合的模塊?

我的問題是,我發現應用程序級別的每個模塊(.c文件)似乎都緊密耦合到項目中的其他C文件。對於任何給定的文件,這可能是2-10個文件的任何地方。

  1. 如何開始編寫單元測試?
  2. 什麼是最好的/快速/最有效的方法來消除這種緊密耦合?
  3. 此外,單元測試將在PC上運行(32位),嵌入式代碼用於16位處理器。如何確保將代碼移植到PC時需要注意這一點?

回答

4

關於#3 - 確保它移植到PC,這裏的策略,我用:

首先,經過嵌入代碼和改變任何「詮釋」或「無符號長」到「INT16」 或'uint32'(或者你選擇的任何約定)。

裹在嵌入式頭部在其中定義的條件內的類型的部分:

#ifndef CORE_TYPE_DEFINITIONS 
#define CORE_TYPE_DEFINITIONS 
typedef long int16; 
/*...*/ 
#endif 

創建一個「PC_Types.h」文件,該文件定義的相同類型的個人計算機。

#ifdef CORE_TYPE_DEFINITIONS 
#error "Core Types already defined" 
#else 
#define CORE_TYPE_DEFINITIONS 
typedef short int16; 
/*...*/ 
#endif 

在PC項目,爲每個嵌入式C文件,其中包含以下包裝:

#include "PC_Types.h" 
#include "ModuleX.c" //the file under test 

#include "TestHarness.h" //verification functions 

int TestModuleXUnit1(void) 
{ 
    /* setup */ 
    /* call Unit1(); */ 
    /* verify post-conditions */ 
    return result; 
} 

通過包裝的每一個文件,你有所有可用的耦合功能需要。 #包裝文件中的原始源文件允許您直接從源代碼管理系統中更新嵌入代碼,而無需進行任何修改。在包含的源代碼之後添加測試功能使得測試代碼可以完全訪問所有模塊的功能,即使它們沒有公共頭文件。

+0

非常感謝,這是我開始的好地方! – IntelliChick 2010-06-28 22:56:09

相關問題