gpt4 book ai didi

c - 定义测试替身时如何避免多重定义

转载 作者:行者123 更新时间:2023-11-30 18:12:20 24 4
gpt4 key购买 nike

我是单元测试的新手,我正在尝试为我想要定义的函数定义一个测试替身。它可能没有太大区别,但我将 IAR 用于 Cortex ARM M3 以及附带的编译器。

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

#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 函数的原始文件的副本,并在另一个文件中对其进行了修改。我以为我可以更改通过 #ifdef 语句调用的函数,但事实并非如此。

对于多个定义,我收到以下错误

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

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

最佳答案

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

我用 #ifndef 将所有代码包装在 MessageController.c 中

#ifndef UNIT_TEST
// All the code in the MessageController.c
#endif

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

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

// original header content

#endif

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

关于c - 定义测试替身时如何避免多重定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37031697/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com