【发布时间】:2010-09-22 22:23:23
【问题描述】:
我有一个函数,我想对其进行测试。但是,它非常大并且创建了一个有限状态机。函数大致如下:
std::auto_ptr<IFiniteStateMachine> CreateFSM()
{
std::auto_ptr<IFiniteStateMachine> = apFSM( new CFiniteStateMachine() );
std::list<IState*> listStates;
listState.push_back( new CStateFoo( /*params*/ ) );
listState.push_back( new CStateBar( /*params*/ ) );
// etc.
apFSM->AddState( listStates );
// Define the transition table
// 1st param: event received
// 2nd param: current state
// 3rd param: next state
apFSM->AddTransition( "EventA", "StateFoo", "StateBar" );
// etc.
return apFSM;
}
基本上,这个函数只是创建一个 FSM、状态和转换表。每个单独的组件(IFiniteStateMachine 和 IState 类)都是可测试的。
所以我的问题是:可以对这样的功能进行测试吗?我不确定您如何验证此功能是否按预期工作。我可能可以把它分成更小的函数来创建状态和转换。但是,刚刚创建这些状态的函数似乎也相当复杂且难以测试。
谢谢。
【问题讨论】:
-
你能根据生成的 FSM 中转换中状态的存在来编写断言吗?
-
有什么方法可以在 C++ 中使用模拟对象?模拟对象通常有助于测试这样的事情。
-
@Kaleb:没错,但我将如何使用 Mock 对象?在测试中,我必须调用 CreateFSM()。我无法使用依赖注入。
-
@Steve:这就是我的倾向。我想我想知道是否有更简单的方法来测试它(或者我只是想多了)。
标签: c++ unit-testing