2008-11-03 38 views
2

我有一個OLE COM對象,試圖寫一個包裝,我決定開始使用TDD爲它編寫的代碼,因爲我相信它會給我一個更好的方向與我試圖寫的東西。 COM對象具有這樣的接口:我會怎麼做TDD與COM OLE對象

Interface Mapinfo 
    Sub [Do](ByVal cmd As String) 
    Function Eval(ByVal cmd As String) As String 
End Interface 

的[待辦事項]命令將採取財產以後像下面

Mapinfo.Do("OpenTable("""C:\Temp\MyTable.TAB""")") 

現在我試圖寫一個包裝所以有這樣的功能:現在

Mapinfo.OpenTable("C:\Temp\MyTable.TAB") 

,我有我的主要問題是,每次我想要寫一個新的測試和一些代碼,我必須創建OLE對象的實例,等待應用程序啓動(30秒+ ),測試我的小函數,關閉並處理OLE對象,更改代碼並再次運行它。

我的問題是:有沒有更好的方法來做到這一切與具有每次啓動OLE應用程序呢?我聽說過模擬物體,但並沒有真正研究它,他們會幫助我嗎?如果是這樣如何?

編輯:現在我已經意識到我將不得不做出一個模擬對象的Mapinfo,我的問題是我怎麼做一個化妝模仿對象,可以採取不同的格式化字符串?這將如何幫助我驗證包裝器中的代碼是否正確?

回答

3

是,模擬對象會有所幫助。從本質上講,您通過嘲諷MapInfo的接口一個假的Mapinfo對象(你應該重命名IMapInfo,順便說一句)。

然後,您會指示該模擬調用期望的內容以及返回的結果(如果適用)。在模擬拋出異常或執行其他任務,是很難用實物來調用您還可以創建測試。

兩大(和免費的).NET嘲諷框架是MoQRhino Mocks。犀牛更成熟,並有更多的配置模擬方式。 MoQ是新手,與Rhino相比,它具有更小的特徵和更少的設置期望的方式。

就我個人而言,我認爲MoQ對於新手來說嘲笑會更好。它相對容易理解,所有與當前版本相關的文檔(搜索Rhino教程,以及幾年前不再適用的垃圾),並且性能良好。