天天看點

解決C++代碼單元測試中的難題-不可驗證和IO調用

在做C++程式的單元測試時,大家經常會遇到兩個問題:

1.不友善驗證測試結果,原因是因為不可通路保護和私有類成員

2.對于需要通路的connect、receive、send等不好繞過

這裡介紹兩種方法,即可解決:

1.在編譯單元測試代碼時,加上UNIT_TEST宏(名字可以為其它你喜歡的),并将private定義成public,即:

#define private public

這樣就可以測試代碼就可以随意通路類的任何成員了,單元測試就是要做白盒測試,将内部看得清清楚楚

以前喜歡使用友元類的方式,但那需要在代碼中安插測試代碼,是以這個辦法更好。

2.對于IO問題,隻需要從被測試再繼承一下,然後重實作(如果為虛拟,則為隐藏)相應的方法,改成友善驗證的,這樣問題也就好解決了。設計模式中的Decorator模式用在這裡非常合适。