2009-07-08 58 views
0

我正在使用已存儲特效,業務對象和DTO:s的遺留系統。業務對象和DTO通常具有相同的屬性。當調用返回DTO的服務層的方法時,正在發生許多轉換。存儲過程 - >數據集 - >業務對象 - > DTO。如果添加新屬性,有時會發生開發人員忘記添加將其從一個圖層/對象移動到另一個圖層/對象的代碼。如何測試對象中的每個屬性是否已設置/給定值?

在系統的某些部分,我通過使用AutoMapper解決了這個問題,AutoMapper會自動使用同名的屬性。

我的問題是針對其他部分。我可以以某種方式編寫一個單元測試,檢查對象中的每個屬性是否已設置/給定值?這樣我就可以編寫一個集成測試來調用我們的服務層,並且所有的轉換都必須成功才能通過測試。

我想解決方案會涉及反射。

回答

0

反射是一種方式,但它有其注意事項,如果將屬性設置爲其默認值,則不會撿起它設置的事實。

您可以使用真實代理進行攔截,然後監聽所有屬性更改。 See the code here您可以使用的基礎攔截器。注意攔截器意味着你需要你的對象是MarshalByRefObject,這可能不是你想要的東西。因此,另一種選擇是告訴工廠在對象返回測試場景之前將其包裝完畢。一些控制庫的注入或許多其他反轉操作可以讓你做到。

+0

對於默認值是正確的。我們今天不使用IoC容器,但需求每天都會變得更大。 – jimmystormig 2009-07-12 15:35:06

0

是的,反思將是一條路。

對一些模擬對象執行單元測試可能是最好的,所以你有一個已知的值來測試。

0

也許你可以改變你的BO/DTO的實現INotifyPropertyChanged接口。這樣你可以設置一些監聽器來告訴你的單元/集成測試哪些屬性發生了變化。

在監聽器中保存所有已更改屬性的列表,並使用反射可以檢入列表中沒有其他屬性。

相關問題