作者lovesnake (LoyalDog)
看板C_and_CPP
标题[问题] State Pattern隔离测试用Code
时间Tue Mar 8 18:17:43 2016
开发平台(Platform): (Ex: VC++, GCC, Linux, ...)
VC++12
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
Google Test
问题(Question):
如何在测试时要知道State Machine到哪个State,但又不把测试Code埋入Production Cod
e
理呢?
目前只能在每个State里面埋一个 std::string GetStateName();
然後用Macro把它包起来 :
#ifdef _TEST
std::string GetStateName();
#endif
愈看愈觉得脏到不行...有什麽办法可以解决这样的情况吗?
让测试Code跟Production Code彻底分开。
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 220.133.8.225
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1457432266.A.21D.html
1F:推 IKAFIRE: 用dynamic_cast检查你state的type?03/08 18:51
2F:→ IKAFIRE: 虽然我觉得应该有更好的方法03/08 18:51
不太了解你的意思...Orz
State的Interface用typeid取出来还是Interface不是Imp Orz
所以在外面看不到Interface的Imp到底是谁,只能靠Imp自己回传了。
再者外面又包了一层State Machine,要把Interface挖出来又更脏了Orz
现在大概是
class IState{};
class StateMachine
{
private:
shared_ptr<IState> m_pState;
}
现在脏的地方是StateMachine跟State里面都要放GetStateName,然後用typeid抓出来
往上丢。
※ 编辑: lovesnake (220.133.8.225), 03/08/2016 19:02:04
3F:推 IKAFIRE: dynamic_cast<StateA>(stateprt)可以判断stateptr是否属03/08 19:24
4F:→ IKAFIRE: 於某runtime type,但是你要逐个type检查所以还是很脏,03/08 19:24
5F:→ IKAFIRE: 只是变成脏在你的测试code里面而已03/08 19:24
了解了!! 感谢~
现在剩下怎麽把StateMachine里面的IState指标拉出来了……
不能public不能提供interface... 还有什麽办法可以测呢QQ.....
※ 编辑: lovesnake (223.137.189.248), 03/09/2016 10:11:11