2011-08-18 75 views
1

嗨想伸手向社會上獲得的辦法爲我開展工作的測試驅動開發見解和意見 。爲ASP.NET MVC 3測試驅動開發 - 解析XML源文件

我正在解析一個物理XML文件(包含圖表和表格數據)的ASP.NET MVC3項目。 首先,應用程序生成xml節點的模型表示。 控制器可以提供最終呈現給包含圖表和表格的特定HTML視圖的應用程序邏輯,

我在想,我將建立一個模型,它代表了xml,即像數據集,標題,尺寸等類的類,其中 適當的接口。這是正確的做法嗎? (請參閱下面的示例xml)

我會寫什麼樣的單元測試? 我會開始訪問物理XML文件(可能不是)的單元測試嗎? 我應該將fragmlx的xml字符串流入Xdocument嗎? (是不是那teting .net代碼?) 假設我不想創建具體的XDocument類,如何模擬出對象,例如

我想要做的第一個測試(我認爲)是加載xml和測試END_DATE是正確

我有加載xml和返回與屬性結束日期的報頭的一個類表示的XMLHelper類。

所以我具體的代碼看起來大致如下

var dataset = XmlHelper.Load(filePathOrXmlStream); 
var header=dataset.Header; 

Assert.AreEqual("5/06/2011",header.EndDate); 

推測如下XML用於流或文件加載。

XML源

<dataset> 
    <header> 
    <end_date>5/06/2011</end_date> 
    <dimension id="mkt" desc="market"> 
     <item mkt="0" desc="Company A" /> 
     <item mkt="1" desc="Company B" /> 
    </dimension> 
    <dimension id="prd" desc="product"> 
     <item prd="0" desc="Product A " Groups_Total="Segment Totals" Total="Yes" Product="All" grp="Category" /> 
    </dimension> 
    <dimension id="msr" desc="measure"> 
     <item msr="0" tag="ACTIVE_1" desc="Active Products" /> 
    </dimension> 
    <dimension id="tim" desc="time"> 
     <item tim="0" tag="LAST WEEK -52" desc="06/06/10 " /> 
     <item tim="1" tag="LAST WEEK -26" desc="05/12/10 " /> 
     <item tim="2" tag="LAST WEEK 0" desc="05/06/11 " /> 
    </dimension> 
    </header> 
    <data> 
    <dpGroup tim="0"> 
     <dp mkt="0" prd="0" msr="0" tim="0">1031</dp> 
     <dp mkt="1" prd="0" msr="0" tim="0">986</dp> 
    </dpGroup> 
    <dpGroup tim="1"> 
     <dp mkt="0" prd="0" msr="0" tim="1">970</dp> 
     <dp mkt="1" prd="0" msr="0" tim="1">937</dp> 
    </dpGroup> 
    <dpGroup tim="2"> 
     <dp mkt="0" prd="0" msr="0" tim="2">982</dp> 
     <dp mkt="1" prd="0" msr="0" tim="2">955</dp> 
    </dpGroup> 
    </data> 
</dataset> 

回答

0

我首先要做的最重要的測試:

Given model representation of xml, 
when user asks html output, 
controller should produce correct view with chart/table. 

製作並通過該測試會讓你想想整體的設計了。之後,它將分支&界限。

0

我認爲你正在接近這個問題。有你的進程真的2個獨立的步驟:

1)將XML文檔轉換成一個類表示,模型
2)渲染模型視圖

其中TDD應該很好地工作的部分是一步2,因爲你在處理對象。然後,您可以按照Taesung Shin所描述的路徑行事。如果需要,你可以定義你的對象的接口是什麼,並且擁有一個帶有StartDate屬性的IChartModel,然後你可以模擬,將StartDate設置爲你想要的,並且寫出關於視圖應該是什麼的斷言在這種情況下。正如Taesung所說,這會幫助你推動你的設計。

的一部分,其中TDD將無法正常工作那麼好是在步驟1單元測試照時,你可以完全在內存中運行,並通過定義磁盤上的文件並沒有在這方面工作。然後,如果您認爲值得付出努力,那麼我會做的是獲取示例文件,並測試XmlReader對這些文件,以確保您正在閱讀您應該的內容,並正確填充步驟2的輸入內容。這些不會是「適當的」單元測試,而是更多的集成測試。我傾向於創建一個「愉快的文件」,並提供適當的輸入,並可能爲潛在的格式錯誤的案例提供文件。隨着時間的推移遇到錯誤,您可以開始添加新文件。儘管如此,這些測試寫起來並不好玩。

如果您要在您的應用程序中創建該XML文件,您可以考慮進行測試,在其中創建這些文件並將其讀回,這可能會讓您對正在進行的操作有更多的「代碼控制」,而不是如果您的設計不斷髮展,必須隨時間維護固定文件。在我看來,分離這個最大的好處是,通過分離你想要的數據在MVC應用程序中的結構和使用方式,從如何從XML文件獲取數據,這是您將在2個不同的層中獲得分離的好處,並且如果您恰好決定從SQL中提取數據,或者隨着時間的推移更改XML文件的結構,則您將在數據訪問和數據之間實現可靠的解耦利用。你將有一個領域模型(圖表應該是什麼),然後可以插入各種數據源。