2010-08-10 89 views
0

我們有一個簡單的web服務來處理有關我們數據的查詢。我想提出一組斷言/案例擴展,這將提供測試響應各個方面的高級方法。例如,我可以編寫assertResultCountMinimum(int)。該方法將負責構建查詢,執行該查詢並解壓縮響應以驗證數據。我也想要擴展Junit4或測試用例?

我想確保我腦海中有正確的想法,關於如何去做這件事。

首先使用正確的設置和拆卸方法創建一個我自己的測試用例類。爲我們的目的,MyTestCase。然後提供一系列使用新的斷言方法擴展Assert的類。這些類的最終用戶將擴展MyTestCase並使用我創建的斷言。這是我認爲我在jWebUnit中看到的模式。

我覺得我在混合和匹配junit 3和4的概念。我很想擁有junit 4個概念。但我似乎無法在我的腦海中建立正確的方式來建立這個。此外,屬於Junit的Assert類的斷言方法都是靜態的。我的一些斷言需要重新查詢web服務。這讓我覺得我應該只是將斷言提供爲MytestCase中的一系列輔助函數。後來完成工作,但感覺不對。

任何見解,沉思,要求澄清,非常感謝。

後續編輯: 正如Jeanne建議的那樣,我正在創建一個超級課程,其中包含我所有的設置/拆解方法&。實際上,我的斷言實際上是輔助函數,它包含基本junit 4斷言,我將其導入到我的超類中。我的任何測試將會擴展這個超級課程。我正在考慮的一個警告是製作超類抽象,因爲不應該有超類的任何實例。

+0

我最終做了大致相同的事情。如果JUnit4將斷言轉化爲靜態調用有邏輯,我就沒有看到它。 ( – 2010-08-12 17:15:32

回答

1

Marc, 我在JUnit 4中使用了兩種模式。對於「實用程序類型」斷言,我做了一個靜態類。例如ReflectionAssertions。然後我使用靜態導入在我的JUnit 4測試中使用這些斷言。

對於僅在一個類中使用的本地類型斷言,我將它們定義爲JUnit 4測試類本身的常規方法。例如assertCallingMyBusinessMethodWithNullBlowsUp()。這些沒有太多重用價值。

我不認爲這個混合概念,因爲後面的組在我的測試之外是不可重用的。如果我有可重用的斷言,使Web服務調用(因此需要狀態),我會創建一個超類TestCase並使用它。我的超類將有用於設置的狀態和@Before方法。因此,這是測試的一部分。

+0

Jeanne,聽起來像我在本地類型斷言的第二種情況。這聽起來像我使用相同的模式,謝謝你的答覆。 – Marc 2010-08-16 17:44:15