[問題] State Pattern隔離測試用Code

看板C_and_CPP (C/C++)作者 (LoyalDog)時間10年前 (2016/03/08 18:17), 10年前編輯推噓2(203)
留言5則, 1人參與, 最新討論串1/1
開發平台(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://www.ptt.cc/bbs/C_and_CPP/M.1457432266.A.21D.html

03/08 18:51, , 1F
用dynamic_cast檢查你state的type?
03/08 18:51, 1F

03/08 18:51, , 2F
雖然我覺得應該有更好的方法
03/08 18:51, 2F
不太了解你的意思...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

03/08 19:24, , 3F
dynamic_cast<StateA>(stateprt)可以判斷stateptr是否屬
03/08 19:24, 3F

03/08 19:24, , 4F
於某runtime type,但是你要逐個type檢查所以還是很髒,
03/08 19:24, 4F

03/08 19:24, , 5F
只是變成髒在你的測試code裡面而已
03/08 19:24, 5F
了解了!! 感謝~ 現在剩下怎麼把StateMachine裡面的IState指標拉出來了…… 不能public不能提供interface... 還有什麼辦法可以測呢QQ..... ※ 編輯: lovesnake (223.137.189.248), 03/09/2016 10:11:11
文章代碼(AID): #1MtgRA8T (C_and_CPP)
文章代碼(AID): #1MtgRA8T (C_and_CPP)