每個COM對象必須有integrity。在簡化的計算,這意味着,如果一個對象實現3個接口 - A
,B
和C
和我有A*
指向對象我必須能夠成功QueryInterface()
既B
和C
和具有B
我必須能夠檢索A
和C
和有C
我必須能夠檢索A
和B
。如何自動測試COM對象完整性?
現在我的對象實現了5個接口,我想測試它的完整性。爲上述所有內容撰寫支票需要付出相當大的努力。是否有工具或一些易於調整的代碼或代碼模式可以做到這一點?
每個COM對象必須有integrity。在簡化的計算,這意味着,如果一個對象實現3個接口 - A
,B
和C
和我有A*
指向對象我必須能夠成功QueryInterface()
既B
和C
和具有B
我必須能夠檢索A
和C
和有C
我必須能夠檢索A
和B
。如何自動測試COM對象完整性?
現在我的對象實現了5個接口,我想測試它的完整性。爲上述所有內容撰寫支票需要付出相當大的努力。是否有工具或一些易於調整的代碼或代碼模式可以做到這一點?
我看不到問題。如果你實現A,B和C,那麼接口A必須適合A,B,C和IUnknown。包括自己。測試對於所有接口都是相同的,您只需要一個接受IUnknown *參數的小函數。
如果我正確地理解了它,你想證明你的實現遵守COM IUnknown規則(傳遞性,反身性等),並且你關心基於接口數量的指數爆炸嗎?
如果您有組件類型庫,您可以編寫一個應用程序,它可以計算出coclasses/interfaces併發出代碼來測試這些規則(此應用程序是通用的,可以與任何具有類型庫的組件一起使用)。也許你甚至可以找到一個在網(我沒有搜索)
最佳
阿德里亞諾
實際上,指數暴露不是問題的原因,因爲很難想象任何對象都實現了超過20個接口。問題是如何編寫確實測試所有必需的QI()請求路徑的代碼。 – sharptooth 2010-03-19 12:51:21
難道這樣的,偉大工程。如果將IUnknown添加到要測試的一組接口中,則變得更加簡單。 – sharptooth 2010-03-19 11:28:00