我有一个需要进行单元测试的TI处理器的嵌入式C语言版本。
对于目标编译使用IAR,但我使用MinGW GCC在Win7机器上运行测试。如何在单元测试时重置状态机C
在C代码中,有些函数包含有时需要在测试之间重置的状态机。这些状态机通常将状态变量保持在本地静态,这使得这个任务即使不是不可能也很困难
我不是很了解C++类,但是我有一个关于将C函数“导入”包装C++类的想法,因为memberfunctions使得只要需要重置就可以创建一个新对象。下面的代码是非功能性的,但它说明了我的想法。
在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是不鼓励,因为它可以被视为“遗产”。
当然也欢迎任何其他解决方案!
什么,我希望能实现没有访问到'static'变量,而是一个办法创建一个新的Statemachine新实例。 是的,多位高级管理人员对我来说是如此,但是正如你所说的那样,要花费额外的时间而不是仅仅对新对象执行另一次运行。 – Enok82
@ Enok82但是这种C代码没有“实例”的概念。全局变量永远是一个全局变量。它将由启动代码初始化(在'main()'在普通程序中运行之前),并且不能在以后再次调用。 – unwind
成功......您的指向动态代码加载的指示向我发送了一条导致相当有用的路径。我会在一两分钟内发布我的解决方案!谢谢! – Enok82