[問題] Testing with fake classes

看板C_and_CPP (C/C++)作者 (火神)時間11年前 (2014/09/02 17:20), 11年前編輯推噓0(0015)
留言15則, 5人參與, 最新討論串1/1
最近在專案做了一些 unit test 有時候會遇到需要 fake class 的時候 然後突然就遇到了一個情況, 不知如何 design 較佳 上來請教一下諸位高手 我們做 ClassA 的 unit test, 其中會使用到 ClassB 如下: class ClassB { public: void Func1(); void Func2(); int Save(); ... } 其中因為 ClassB.Save() 會存取 DB, 因此在 unit test 時 我繼承 ClassB 做了一個 fake(mock) class: ClassBFake 然後 #ifdef TEST #define ClassB ClassBFake #endif 基本上大多情況都運作正常, 直到遇到下面的情況, 突然覺得 something wrong """ int ClassA::CorrectData(vector<ClassB> &BVec); { CorrectDataInClassB(BVec); ... // blah for BVec ... } Compile error XD 原因自然是因為 vector<ClassB> 和 vector<ClassBFake> 的衝突了 那麼要怎麼做才是使用 Fake(mock) class 比較完善的方法呢? 不知道有沒有人有過這個需求 XD // 總不會還要寫一個 CorrectData(vector<ClassBMock>&) 吧 (假議題) 這樣我也還要對 CorrectDataInClassB 做一樣的事 (崩潰) 再不然就是把樓上這兩個傢伙全寫成 Template function (...) 架構上的更正也可以是個選項... Any idea? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 59.120.41.39 ※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1409649640.A.BCD.html ※ 編輯: Ebergies (59.120.41.39), 09/02/2014 17:42:58

09/02 18:23, , 1F
ClassBMock都已經繼承B了為什麼不用polymorphism解決
09/02 18:23, 1F

09/02 18:25, , 2F
要是怕polymorphism會有overhead就用#ifdef 沒TEST的時候
09/02 18:25, 2F

09/02 18:25, , 3F
B的function不要virtual
09/02 18:25, 3F

09/02 19:16, , 4F
ClassB 不都換成 ClassBMock 了, 怎麼還會有問題?
09/02 19:16, 4F

09/02 20:53, , 5F
沒說清楚, CorrectDataInClassB 是 library 的 function
09/02 20:53, 5F

09/02 20:54, , 6F
因此它不會吃到 define, 其他有使用到 ClassB 的部分的
09/02 20:54, 6F

09/02 20:55, , 7F
確是像一樓說的由多型解決了
09/02 20:55, 7F

09/02 21:00, , 8F
但這樣說來的話, 既然 CorrectDataInClassB 不是這個
09/02 21:00, 8F

09/02 21:01, , 9F
ClassA 的 function, 或許還真的得 fake 它才合理
09/02 21:01, 9F

09/02 21:14, , 10F
SUT 是 ClassA::CorrectData 其他不相干的應該可以 Fake
09/02 21:14, 10F

09/03 00:02, , 11F
只吃vector<ClassB>的lib func是問題所在 你怎麼改都沒用
09/03 00:02, 11F

09/03 20:17, , 12F
Thanks a lot everyone ~ LOL
09/03 20:17, 12F

09/05 12:33, , 13F
mocking請靠繼承 不要用template耍花招 會有問題 :P
09/05 12:33, 13F

09/10 14:03, , 14F
有點疑問 ClassBMock 跟 ClassBFake差別在哪?
09/10 14:03, 14F
我覺得應該只是用詞不同, 我有混用嗎!!? @@

09/10 14:03, , 15F
還有上色不要用藍色 幾乎看不到阿阿阿阿
09/10 14:03, 15F
因為是假議題所以請無視... 哈哈~ ※ 編輯: Ebergies (59.120.41.39), 09/11/2014 20:08:58
文章代碼(AID): #1K1OlelD (C_and_CPP)
文章代碼(AID): #1K1OlelD (C_and_CPP)