首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何开始为遗留的嵌入式C应用程序编写单元测试-非常紧密耦合的模块?

如何开始为遗留的嵌入式C应用程序编写单元测试-非常紧密耦合的模块?
EN

Stack Overflow用户
提问于 2010-06-28 07:06:00
回答 2查看 546关注 0票数 7

我目前正在开发一个代码库,它从来没有编写过任何单元测试。它是为16位嵌入式处理器编写的,我想至少为我编写的所有代码添加单元测试,然后将其扩展到代码的其他部分。

我的问题是,我发现应用程序级别上的每个模块(.c文件)似乎与项目中的其他C文件紧密耦合。对于任何给定的文件,这可能是从2-10文件向下的任何地方。

  1. 如何开始编写单元测试?
  2. 消除这种紧密耦合的最佳/快速/最有效方法是什么?
  3. 此外,单元测试将在PC上运行(32位),嵌入式代码用于16位处理器。如何确保在将代码移植到PC时处理这一问题?
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-06-28 22:31:54

关于#3 -确保它可以移植到PC上,下面是我使用的策略:

首先,遍历嵌入的代码,并将任何'int‘或'unsigned long’更改为'int16‘或'uint32’(或您选择的任何约定)。

将该节包装在嵌入的标头中,在其中定义条件内的类型:

代码语言:javascript
复制
#ifndef CORE_TYPE_DEFINITIONS
#define CORE_TYPE_DEFINITIONS
typedef long int16;
/*...*/
#endif

创建一个"PC_Types.h“文件,为PC定义相同的类型。

代码语言:javascript
复制
#ifdef CORE_TYPE_DEFINITIONS
#error "Core Types already defined"
#else
#define CORE_TYPE_DEFINITIONS
typedef short int16;
/*...*/
#endif

在PC项目中,为每个嵌入的c文件创建一个包装器,其中包含以下内容:

代码语言:javascript
复制
#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;
}

通过包装每个文件,您可以根据需要使用所有耦合函数。#将原始源文件包含在包装文件中,可以直接从源代码管理系统中删除对嵌入式代码的更新,而无需进行任何修改。在包含的源代码之后添加测试函数,可以让测试代码完全访问所有模块的函数,即使它们没有公共标头。

票数 4
EN

Stack Overflow用户

发布于 2010-06-28 07:14:39

我会从重读迈克尔·羽毛对遗产代码的有效运用开始。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3130612

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档