gpt4 book ai didi

c++ - 单元测试C时如何重置状态机

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:01:13 24 4
gpt4 key购买 nike

我有一套用于 TI 处理器的嵌入式 C,需要进行单元测试。
对于目标编译,使用了 IAR,但我在使用 MinGW GCC 的 Win7 机器上运行测试。

在 C 代码中,有些函数包含有时需要在测试之间重置的状态机。这些状态机通常将它们的状态变量保持在局部静态,即使不是不可能,也使该任务变得困难。

我不是很精通 C++ 类,但我有一个关于将 C 函数作为成员函数“导入”到包装 C++ 类中的想法,这样就可以在需要重置时创建一个新对象。下面的代码不起作用,但它说明了我的想法。

在 main.cpp 中:

    #include "statemachine.h"

using namespace std;

class stateMachineWrapper {
public:
extern void stateMachine(void);
};

int main() {
stateMachineWrapper myObject;

myObject.stateMachine();

myObject.stateMachine();

stateMachineWrapper myNewObject;

myNewObject.stateMachine();

myNewObject.stateMachine();

return 0;
}

在 statemachine.h 中:

    void stateMachine(void);

在 statemachine.c 中:

    #include <stdio.h>

void stateMachine(void)
{
static int myState = 0;

switch(myState)
{
case 0:
{
printf("Init State");
myState = 1;
break;
}
case 1:
{
printf("Second state");
break;
}
default:
{
printf("Default");
break;
}
}
}

不鼓励更改 statemachine.c/.h,因为它可以被视为“遗留”。
当然也欢迎任何其他解决方案!

最佳答案

包装无济于事。 C++ 代码无法访问用 C 语言编写的状态机中的内部 static 变量。

一种解决方案是对 C 部分使用动态代码加载,这将生成早期初始化代码并清除 static 变量。

您还可以将测试拆分为多个可执行文件,这具有相同的效果,但可能会产生更大的开销(=测试将运行得更慢)。

关于c++ - 单元测试C时如何重置状态机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33519285/

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