我目前正在开发一个代码库,它从来没有写过任何单元测试。它是为16位嵌入式处理器编写的,我想开始为我编写的所有代码添加单元测试,至少将其扩展到代码的其他部分。
我的问题是,我发现应用程序级别的每个模块(.c文件)似乎与项目中的其他C文件紧密耦合。对于任何给定的文件,这可能是2-10个文件中的任何一个。
答案 0 :(得分:4)
答案 1 :(得分:4)
关于#3 - 确保它可以移植到PC,这是我使用的策略:
首先,浏览嵌入式代码并将任何'int'或'unsigned long'更改为'int16' 或'uint32'(或您选择的任何惯例)。
将嵌入标题中的部分包裹在条件中定义类型:
#ifndef CORE_TYPE_DEFINITIONS
#define CORE_TYPE_DEFINITIONS
typedef long int16;
/*...*/
#endif
创建一个“PC_Types.h”文件,该文件为PC定义相同的类型。
#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;
}
通过包装每个文件,您可以根据需要使用所有耦合功能。 #include包装文件中的原始源文件允许您直接从源代码管理系统中删除嵌入代码的更新,而无需任何修改。在包含的源之后添加测试函数使测试代码可以完全访问所有模块的功能,即使它们没有公共头。