2011-06-06 303 views
0

我對TDD非常新,所以請原諒我,如果我的問題沒有太大意義。JUnit集成測試

環顧四周後,似乎jUnit能夠實現集成測試。我希望社區能爲我提供一些關於如何編寫集成測試的指導。這是我的設計的簡單概述。

我有Main1,它接受一個zip文件列表。 Main將提取zip文件,編輯zip文件內的pdf內容,並將最終的pdf文件放入文件夾X。如果pdf的數量達到THRESHOLD,那麼Main2Processor(不是主類)將被調用並壓縮所有pdf文件,並且還會創建一個與新創建的zip文件具有相同名稱的報告文本文件。

如果我運行Main2,它也將揭開序幕Main2Processor,這將壓縮的PDF文件,並創建文本文件報告(即使在文件夾X PDF的數量沒有達到閾值)。

如何編寫集成測試測試我的上述設計的正確性?

+0

如果您至少可以提供Main1,Main2等的接口,那將會很不錯。TDD不僅描述您設計測試的方式,而且還描​​述您設計業務代碼的方式。 – 2011-06-06 20:37:22

+2

此外,你的組件的命名有點奇怪,除非你隱藏真實姓名,當然:)。通常在Java/C世界中main是一個用來啓動程序的函數,但是如果你想設計一個可測試的代碼,你可能應該把它分解成可替換的組件。這將允許你用mock替換一些類。 – 2011-06-06 20:41:25

+0

@Andrey:對不起,我遲到了。是的,我試圖隱藏班級的真實姓名。如果你可以提供一些代碼來證明你的意思,如果你想設計一個可測試的代碼,你可能應該把它分解成可替換的組件。這將允許你用mock'替換一些類。非常感謝你。 +1 – 2011-06-07 15:01:18

回答

1

我認爲你應該爲你的測試創建一些實用方法。例如運行應用程序了,檢查目錄,清理目錄等

然後,你將能夠實現像測試以下內容:

@Test 
public mytest1() { 
    exec(Main1.class, "f1.zip", "f2.zip"); 
    Assert.assertTrue(getFileCount(OUTPUT_DIR) < THRESHOLD); 
    // perform verification of your files etc... 
} 
+0

非常感謝。我很喜歡這個想法。 – 2011-06-07 15:19:24

1

首先會形容你上面的說明,但是從「測試序列「的觀點。例如,測試人員將向Main1提供一組N個pdf文件,N低於該閾值。然後,在Main1返回後,您的測試代碼將檢查X文件夾內容以及報告,以驗證您的期望是否得到滿足。

JUnit本身只是幫助運行測試用例,它並沒有真正幫助編寫測試。 而JUnit則是以「單元測試」爲導向的(但您可以將其用於集成測試,儘管某些情況並不適用;例如需要全局設置時,或者測試用例預計在具體順序...)。

一些額外的庫可以幫助您很輕鬆地與其他代碼進行交互:dbunit,httpunit等。

+0

非常感謝。我現在有了這個想法。謝謝 – 2011-06-07 15:23:33

2

你是對的; JUnit可以用來編寫稱爲集成測試的測試。你所要做的就是放鬆有關不接觸外部資源的測試規則。首先,我會重構你的應用程序的main(),儘可能少地做它可以做到的事情;在main()函數中測試代碼並不是一個好方法。讓它構造並運行一個對象(如果願意,該對象可以是包含main()的對象),將該新對象傳遞給ZIP文件列表。該對象現在可以通過實例化使用JUnit進行測試。

現在,您只需構建測試來設置恆定測試環境,然後執行可重複測試。創建或清除某處的臨時目錄,然後將一些測試ZIP文件複製到該目錄中。然後,運行你的主處理器。

要檢測達到閾值時是否發生了正確的行爲,您只需測試是否存在zip文件(和/或如果未達到閾值,則不存在)。

+0

非常感謝。我現在有了這個想法。幸運的是我的主力很少。主要只是調用處理每一件事情的'處理器'。 – 2011-06-07 15:27:40

2

你真的想要一個「集成測試」嗎?(這個術語現在已經超出了理解範圍,所以如果你能說明你的最終目標會有所幫助)?如果您使用此控制檯/ GUI應用程序(如具有特定輸入的真實用戶)並檢查預期輸出的驗收測試如何?

JUnit僅僅是一個測試運行者,並沒有注意到測試實際做了什麼。所以是的,你可以用它來寫任何測試。然而,它已經爲單元測試而構建,並且有時會泄漏。測試關閉第一個錯誤/第一個斷言不成功的事實。通常粗糙的測試喜歡推進並在最後得到一堆錯誤。

如果你想要一個集成測試 - 你將不得不重新設計你的應用程序以便從測試中調用(如果它不是這樣的話)。提出寫這個測試的具體障礙,我可以提供更具體的建議。

+0

感謝您的意見,我會仔細反思。我讀過一篇文章也說「集成測試是一個騙局」,並改變了我的想法。 tyvm您的意見。 – 2011-06-07 15:22:07