2013-10-04 121 views
0

短篇小說。 我參與的一個項目中的某個人決定使用反射從另一個DLL訪問另一個類的成員。爲什麼?懶惰。 我有一個很好的(壞的)習慣,在檢入文件之前消除所有的Resharper警告。 有一天,我看到一個私人成員沒有在其所屬班級的任何地方使用......所以,shift + delete和成員消失了。兩個月後,來自我們的一個生產基地的暢銷產品。 花了我們1周的時間才發現我們的問題是反射代碼找不到私有成員,並且包裝代碼不夠好。 發生這種情況時,我們的自動測試也沒有涉及這種情況。使用反射訪問私人會員

您推薦哪種代碼分析工具,可以在哪裏設置這些用例的規則?

感謝

+1

你的第二個問題是主觀的,這個網站的主題,請刪除它的問題。 –

+4

答案:解僱使用反射訪問生產代碼中的私人成員的白癡。如果他已經被解僱了,那就去他的草坪上po po。 –

+0

@JonathonReinhart - 這是一個有趣的建議......也可能應該直接指向OP:人們必須使用反射才能訪問私有方法的主要原因是拒絕API提供者公開必要的功能。所以爲了避免DLL更好地提供有用的完整API ... –

回答

4

沒有工具,沒有辦法來測試這種對事物的DLL側。

您保留某些方法的原因是公開的,而且某些方法是私有的,因此您可以擁有一個發佈的合約,以供使用您的DLL的人使用。你在DLL中的內部應該是一個黑盒子,任何人都不應該知道或關心發生了什麼。

爲此「測試」的唯一方法是在調用方爲使用反射的任何函數編寫bog標準單元測試。然後,您必須確保DLL的發貨版本與您的單元測試版本相匹配。

至於那些使用反思的人,讓他證明他的理由,如果不是令人滿意的話,他會讓他接受感化,要求他提交的所有代碼在被允許進行檢查之前都要進行更徹底的檢查。如果他沒有停止做像這樣的事情(當他絕對不應該使用反射,或者不通過單元測試編寫代碼時,他必須使用反射來確保他所調用的代碼在內部沒有改變)他應該被解僱

+0

這是我讀過的最棒的答案。而且,你也是100%正確的。 – Brian

+1

你剛剛給了我一個主意。我認爲我們可以限制程序員使用.NET反射API。相反,我們可以爲反射代碼創建代理API,並根據代理API中使用的特定調用實現自動生成的測試。 –