定义测试双精度时如何避免多个定义

时间:2016-05-04 15:10:55

标签: c unit-testing embedded

我是单元测试的新手,我正在尝试为我正在尝试定义的函数定义测试双精度。它可能没什么区别,但我使用IAR作为带有附带编译器的Cortex ARM M3。

在我试图测试的函数中,我调用了一个通过串行接口发送消息的函数。 这是一些伪代码来说明我想要完成的任务:

#ifdef UNIT_TEST
#include "MessageController.h"
#else
#include "FakeMessageController.h"
#endif

uint8 FunctionToTest(....)
{
  uint8 data[100];
  uint8 error;

  //Prepare data to send here
  SendMessage(data);

  if (error)  return 1;
  else return 0;
}

我创建了一个包含SendMessage函数的原始文件的副本,并在另一个文件中创建了mofications。我认为我可以改变通过#ifdef语句调用的函数,但是,就是这种情况。

我为多个定义收到以下错误

Error[Li006]: duplicate definitions for .... ; in "......\Tests\Debug\Obj\MessageController.o", and "....\dvlp\Debug\Tests\Debug\Obj\FakeMessageController.o"

我完全理解链接器给出此错误的原因,但是有解决此问题的方法吗?或者某种方式欺骗链接器使用正确的函数? 我无法修改测试功能,因为它是我项目中原始文件的链接。

1 个答案:

答案 0 :(得分:-1)

感谢您的帮助。我找到了自己的解决方案。

我在MessageController.c中用#ifndef

包装了我的所有代码
#ifndef UNIT_TEST
// All the code in the MessageController.c
#endif

在MessageController.h中,我使用了这个技巧:

#ifdef UNIT_TEST
#include "FakeMessageController.h"
#else

// original header content

#endif

在我看来,这不是最干净的,但它对我有用。