2010-04-26 28 views

回答

6

隨着技術的副總裁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(通往持久性意識)
  • ErrorsChanged
  • PendingEntityResolved
  • 的PropertyChanged
  • ToQuery <>

就我個人而言,我會削減這兩個(EntityAspect,PropertyChanged);其他人偷偷靠我。對於它的價值,從Object繼承(如你必須)貢獻另一個無關的五。

我們覺得我們在純粹的P.I.之間取得了很好的平衡。和易於開發。

我的問題是「它是否爲您提供了什麼需要驗證期望,而不需要太多的摩擦......沿着從單元到深度集成測試的整個範圍?」

我非常想知道如何獲得類似的設備,減少與同類產品的摩擦。並渴望就如何改進我們對應用程序測試的支持提出建議。

請隨時關注我可能忽略的其他測試場景。

希望這有助於

沃德

+1

謝謝您的回答,這是非常好的,它說服我的產品至少評估。我不會這樣做,因爲我已經訓練自己忽略了流行語,其描述大部分都是嗡嗡聲。我最擔心的是它可能缺乏靈活性。 我喜歡首尾測試「有趣的功能」。當這是不可能的時候,我定義一些界限以便「結束」是清楚的。在過去的幾個月裏,工作在一個智能客戶端上,邊界是GUI和數據層(由於測試EF中的複雜性),但我正在研究白色項目以將邊界推向WPF GUI。 – 2010-04-29 07:55:41