我是单元测试的新手,我正在尝试为我正在尝试定义的函数定义测试双精度。它可能没什么区别,但我使用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"
我完全理解链接器给出此错误的原因,但是有解决此问题的方法吗?或者某种方式欺骗链接器使用正确的函数? 我无法修改测试功能,因为它是我项目中原始文件的链接。
答案 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
在我看来,这不是最干净的,但它对我有用。