我將開始一個需要Web和桌面界面的項目。一種解決方案似乎是IdeaBlade(http://www.ideablade.com)。 任何使用它的人都能描述它的侷限性和優點嗎?它是可測試的嗎?IdeaBlade的一些限制是什麼?
謝謝, 亞歷克斯
我將開始一個需要Web和桌面界面的項目。一種解決方案似乎是IdeaBlade(http://www.ideablade.com)。 任何使用它的人都能描述它的侷限性和優點嗎?它是可測試的嗎?IdeaBlade的一些限制是什麼?
謝謝, 亞歷克斯
隨着技術的副總裁IdeaBlade它不是我一般評論在這個空間中DevForce侷限性和優勢。很樂意回答具體的問題。
可測試嗎?對此,我可以回答一個答案的開頭。
這是一個潛在的爭議問題。人們對什麼使測試成爲可能。讓我把自己侷限於特定的測試場景..然後你判斷我們滿足測試要求的程度。
1)如果這是您的偏好,DevForce支持純POCO實體。大多數人會更喜歡使用從我們的實體類派生出來的實體,所以我將我後來的言論完全限於這些實體。 2)你可以使用任何你想要的ctor來創建這樣一個實體,並且可以在沒有其他設置的情況下獲取並設置它的(非導航)屬性。
var cust = new Customer {ID=..., Name =...}; // have fun
當然需要大會參考資料。
3)要測試它的導航屬性(返回其他實體的屬性),首先新建一個EntityManager(我們的工作單元,類似上下文的容器),將實體添加或附加到EM,然後關閉走。從我們的基類繼承的實體的導航屬性期望通過該容器查找相關實體。
4)在大多數自動化測試中,EntityManager將在斷開連接的狀態下創建,因此它永遠不會嘗試訪問服務器或數據庫。
您可能會添加一個訂單,一個客戶,一些OrderDetails;請注意,它們都是在測試環境中構建的......不能從任何地方檢索。
現在order.Customer返回測試Customer; order.OrderDetails返回您的測試詳細信息。您的準備工作包括創建EM和測試實體,確保這些實體具有唯一的ID並關聯。
下面是一個例子序列:
var mgr = new EntityManager(false); // create disconnected
var order = new Order {ID = ..., Quantity = 1, ...};
var customer = new Customer {ID = 42, Name = "ABC", };
mgr.AttachEntity(order);
mgr.AttachEntity(customer);
order.Customer = customer; // associate them
的EM充當一個內存數據庫。
5)你可以使用LINQ現在
var custs = mgr.Customers.Where(c => c.Name.StartsWith("A").ToList();
var orders = mgr.Orders.Where(o => o.Customer.Name.StartsWith("A")).ToList();
6)當然,我總是創建一個新的EntityManager之前,每個測試,以消除交叉測試污染。
7)我經常編寫一個所謂的「數據母親」測試助手類,用一組標準的測試數據集合填充EM,包括異常情況。
8)我可以將EntityManager的測試實體緩存導出到文件或測試項目資源。當測試運行時,DataMother可以檢索和恢復這些測試實體。
注意到我正在逐步從單元測試轉向集成測試。但是(到目前爲止)我的測試不需要訪問服務器,實體框架或數據庫。它們運行速度快,而且不易分散設置失敗。
當然,您可以通過深度集成測試進入服務器,並且可以輕鬆地爲本地,LAN和Web場景切換服務器和數據庫。
9)您可以攔截查詢,保存,更改,添加,刪除和其他事件進行交互測試。
10)我所描述的所有東西都可以在常規.NET和Silverlight中以及我遇到的每個測試框架中工作。
不利的一面,我不會將我們的產品描述爲模擬型。
我很樂意承認我們不是持久無知(PI)。如果你是一個狂熱的愛好者,我們是你的錯誤選擇。
我們嘗試欣賞PI的重要優勢,並盡我們最大努力在我們的產品中實現它們。我們盡我們所能來分散框架關注的問題。不過,正如你所看到的,我們的抽象在幾個地方泄露。例如,我們這些成員添加到您的實體的公共API:
就我個人而言,我會削減這兩個(EntityAspect,PropertyChanged);其他人偷偷靠我。對於它的價值,從Object繼承(如你必須)貢獻另一個無關的五。
我們覺得我們在純粹的P.I.之間取得了很好的平衡。和易於開發。
我的問題是「它是否爲您提供了什麼需要驗證期望,而不需要太多的摩擦......沿着從單元到深度集成測試的整個範圍?」
我非常想知道如何獲得類似的設備,減少與同類產品的摩擦。並渴望就如何改進我們對應用程序測試的支持提出建議。
請隨時關注我可能忽略的其他測試場景。
希望這有助於
沃德
謝謝您的回答,這是非常好的,它說服我的產品至少評估。我不會這樣做,因爲我已經訓練自己忽略了流行語,其描述大部分都是嗡嗡聲。我最擔心的是它可能缺乏靈活性。 我喜歡首尾測試「有趣的功能」。當這是不可能的時候,我定義一些界限以便「結束」是清楚的。在過去的幾個月裏,工作在一個智能客戶端上,邊界是GUI和數據層(由於測試EF中的複雜性),但我正在研究白色項目以將邊界推向WPF GUI。 – 2010-04-29 07:55:41