2009-11-20 88 views
3

我在如何單元測試解析文件中掙扎了一番...假設我有一個包含25列的文件,這個文件可以是20-1000條記錄長的任意位置......我如何編寫一個單元測試?該函數將文件作爲字符串作爲參數,並返回一個帶有文件內容的DataTable ...單元測試文件解析例程?

我能想到的最好解析4記錄文件,只檢查左上角和右下角' ...例如前2個記錄中的前幾個字段和2個底部記錄中的最後幾個字段......我無法想象必須對文件中的每個字段進行繁瑣的手型斷言語句。只做一個記錄,每個領域看起來都很薄弱,因爲它沒有考慮多個記錄文件或意外數據的情況。

當時看起來'夠用'了......但是現在我正在研究一個新的項目,它基本上解析了來自10個不同來源的各種PDF文件,每個來源都有4-6種不同的格式爲他們的文件,所以約40-60分析例程。我們最終可能會完全自動化其他25個來源。我們採用PDF並使用第三方工具將其轉換爲excel ..然後,我們坐下來分析輸出中的模式,並編寫調用該工具API的代碼,獲取excel文件並解析它 - 剝離垃圾,在不同地方對數據進行排序,清理等。

我真的可以測試類似這樣的東西嗎?

回答

3

我不確定我完全理解這個問題,但這裏有一個想法。收集一堆代表不同格式和邊緣情況的示例文件。運行轉換到您的DataTables和第一次手動檢查DataTables,以確保它們是正確的。然後將DataTable的序列化爲XML格式,並將它們與您的測試用例PDF文件一起存儲在單元測試套件中。

您的自動化單元測試可以執行從PDF到DataTable的轉換,並將結果與​​相應的「批准的」序列化的DataTable表示進行比較。

您可以使用此方法隨着時間建立一個測試文檔庫。單元測試中的失敗將表明解析例程的更改已經打破了特定的邊界情況。

雖然有一個'catch'。我的第一個 示例我正在討論.NET 應用程序。然而,這個新項目 與40可能'擦洗 腳本'是用VBA編寫.... 輸入是一個Excel電子表格和 輸出是一個Excel電子表格...如何 我可以序列化這?也許在整個文件上做一個 校驗和?

因爲如果Excel電子表格不是太複雜,你可以嘗試創建通過細胞比較例程像this one單元格中的第二個例子;也許你可以把它包裝到一個自定義的Assert.AreExcelWorksheetsEqual()中。你是對的,校驗和也可以。

+0

這是個好主意 - 我沒有想過對XML進行序列化/反序列化。然後,我不需要爲整個文件中的每個單元格調用一次Assert()函數。只需要一個斷言(或者是否必要的循環)以確保它匹配 – dferraro 2009-11-20 16:03:54

+0

儘管有一個「catch」。我是第一個講述.NET應用程序的例子。 但是,這個帶有40個可能'擦洗腳本'的新項目是用VBA編寫的....輸入是一個Excel電子表格,輸出是一個Excel電子表格...我怎麼能序列化這個?也許做整個文件的校驗和? – dferraro 2009-11-20 16:06:37

+0

鏈接已死... :( – Shanimal 2016-03-25 14:51:30

2

當您必須圍繞數據樣本構建單元測試時,請使用預期輸出數據的第二個樣本。 10K行文本或二進制兆字節。不要緊。

無論大小如何,您都可以準備預期的輸入樣本和輸出數據表。將其存儲在源代碼旁邊的文件/腳本中。在測試中包含獲取數據樣本,處理數據和使用某種通用比較工具或SQL語句將輸出比特與比較結果進行比較的步驟以及預期結果。