2013-07-11 17 views
0

我有兩個類,ParserItem。解析器類解析某些結構化文檔,並返回Item對象,如果您調用類似Parser::GetItem(int some_id)的東西。 這個Item類是用「Tell - do not ask」原則編寫的。我的意思是它沒有getter方法的幾個內部變量,這些變量由構造上的Parser填充。如何單元測試返回'tell-dont-ask'對象的解析器?

現在的問題是:我怎麼能單元測試Parser類?如何檢查內部Item變量是否被正確解析? 我是否必須重新安排我的課程? 解析器接口返回完全構造的Item對象可能是不好的設計嗎?

回答

1

您的設計可能不是理想的,但不看代碼就很難知道。

有些事情要問自己,就是Parser隱藏了太多的信息,結果做得太多了。

我強烈建議您從Michael Feather觀看這個演示文稿,其中(有趣的是)他討論瞭如何使用測試改進解析器的設計,並且看起來他解決的問題與您嘗試的類似解決。 Michael Feathers - the deep synergy between testability and good design

+0

現在我已經把解析器分成了兩個類。實際的解析器,它只存儲結構中的字符串和項目構建器類。後者從解析器中獲取所需的結構,並進行所有轉換和檢查,比如將字符串轉換爲數字。 現在,我至少可以檢查解析器是否從文檔中提取正確的信息。 但問題仍然存在,因爲我無法檢查項目構建器中的所有轉換是否正常工作。我認爲我應該儘量減少項目構建器的功能,並儘可能地將其交給可測試的幫助器類。 – lslah

+0

感謝您的回答!我認爲你的關鍵點在於我的解析器太大了。 也感謝您的鏈接。我會在稍後觀看。 – lslah