1. 程式人生 > >軟工個人專案-8.單元測試

軟工個人專案-8.單元測試

// 鬼知道我QAQ這個下午經歷了什麼。。

12/27

13:30~14:20

尋找C語言單元測試的資料,然後找到一堆C++。

因為並不清楚那些個全域性變數應該怎麼處理,很多函式使用和改變了外部的全域性變數,感覺是傳說中“不可測”的程式碼。

14:20~18:20

github上找到了一個人在VS裡寫的對C語言的測試cpp,大體有了概念。

顯然,C語言並不是不能測。如果在呼叫被測試函式之前把所需要的全域性變數都根據語境設定好,就可以測。

PCH_H

然後遇到的第一個問題是,明明之前設定的不使用預編譯頭,和測試工程一起生成之後,VS非要pch.h。我把測試工程的“需要預編譯頭”選項也去掉,沒有作用。但pch我已經刪了。我嘗試新建一個內容一樣的,但是它無視了這個檔案。最終我把兩個工程解除安裝再裝載莫名其妙就好了。具體原因尚待探究。目前就先記住管住手不要亂動東西。

LINK

第二個問題是,我新建的測試專案即使設定了引用以及添加了.obj,一直鏈接失敗,說缺乏符號。然後一頭扎進VS的連結器文件,修改各種配置引數,也沒有解決。這一部分特別不堪回首。最終這個問題通過把sudoku專案下的原始檔複製貼上到測試專案下暴力解決:就不信這樣還 (=。=) 找不到宣告對應的定義。

這也有點不求甚解的意思。常言道,最友好的錯誤是編譯錯誤,最差的是連結錯誤,明明寫的都對,就是跑不了。連結器的各種操作,且待後續觀察吧。

NULL PTR

終於可以測試了,為了測試方便(其實毫無意義),我把debugger的命令列引數刪了,然後發現原來用的好好的sudoku生成不了了,顯示未載入ucrtbased.pdb。然後就各種方法補充符號檔案,但是都沒有用。最終看到報錯資訊有0x000000字樣,而且一次重啟VS後它跳到strcmp的彙編程式碼裡去了,就懷疑和空指標有關。最終把debugger的命令列輸入值之後一切恢復了正常,然後發現是main裡的流程控制有疏忽,在命令列沒有引數的時候沒有及時退出,而是參與到後面的命令列解析中,導致對字串的空指標訪問。

然後痛哭,解決了一大堆自找或非自找的ERROR,終於可以測試了。

19:30~21:30

編單元測試。通過不了的原因都是測試用例寫出了bug:被測程式碼比人腦子想的測試用例靠譜多了。

最大收穫是掌握了除錯未通過測試的辦法(其實和平時一樣的斷點啦),和測試錯誤輸出的辦法(記得加L)。

程式碼覆蓋率測試的功能Enterprise才有,但是實在沒時間裝那個東西了,就沒有做。

22:30~23:20

寫這篇部落格。

一些吐槽:

真的好沮喪,我感覺我幹什麼都特別慢。尤其是寫程式碼,連個回溯都寫了一個小時,雖說一次通過沒有bug,但是很多時間就是對著螢幕發呆。而且好多時間都在搞VS,今天時間主要就用來卡它了。

哎,不管了,下一步,消除所有警告。晚安同學們。