簡體   English   中英

如何對返回XML的“存儲庫”進行單元測試?

[英]How should I unit test a “repository” that returns XML?

對於一個項目,我有一系列創建XML的偽存儲庫(它們不是真正的存儲庫,但起着相同的作用,因此我不再使用該命名法了),方法是調用一些返回XML的存儲過程。 就我的項目而言,我還有“映射器”(同樣不是真正的映射器...),它們將XML作為輸入並使用Linq將原始XML轉換為DTO。

由於我擁有映射器,因此在我看來,“存儲庫”不應該測試返回的值(因為這是映射器的工作;存儲庫僅在乎是否返回了一些XML,無論XML數據是否正確)。 但是,這導致測試實際上只是確保“存儲庫”的返回值不為null。

基本上,每個存儲庫都實現一個接口,該接口具有一個稱為GetXml方法,該方法返回XML文檔。 實際的實現會執行數據庫調用,但是對於測試,我有一個非常基本的模擬類,該類僅返回一個空白XML文檔。 最終,我將需要使用一些硬編碼的值來構建實際的XML文件,但是存儲庫測試本質上是單行是否“好”: Assert.IsNotNull(repository.GetXml(), "Xml response was null");

這是應該進行測試的東西,還是有一種更好的方法來進行測試而不踩踏制圖儀的腳趾? 我想從設計的角度來看,我可以完全刪除映射器,而讓存儲庫自己進行映射(或使映射器位於存儲庫內部)。 我沒有做TDD,因為我實際上已經編寫了代碼,但是我想創建測試,以便於測試,因此我可以向同事展示測試的好處(我們目前不使用任何類型自動測試)。

我猜想我真正要問的是:編寫向可能使用該代碼的人表達設計意圖的測試,而實際上並不關心返回的值,這可以嗎? 現在,這些測試就是這樣做的:他們在代碼中說:“我應該能夠創建一個XmlXXXRepository類,該類實現一個名為IXmlRepository的接口,在構造時采用一個長稱為quoteID的類,並且具有一個名為GetXml()的方法,該方法返回一個XmlDocument對象”就是這樣。

我通常為XML方法編寫兩種類型的測試。 首先,我為創建XML結果所涉及的邏輯編寫單元測試。 這通常會迫使您將邏輯提取到另一個類中,以便將邏輯和XML創建分開。 這通常意味着邏輯最終會填充DTO,並使用某種生成器類或簡單的XML序列化程序從生成的DTO中創建XML。

一旦單元測試完成所有工作,我就開始使用一組已知的輸入和XML輸出來創建集成測試。 根據XML結果,這可以是非常簡單的文本比較,也可以是一系列XPath查詢,以驗證XML中的結構和值。

哦,對於這種測試,MBUnit中的XML斷言很棒。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM