簡體   English   中英

在Java Spring / Hibernate / Maven項目中測試多步驟過程的正確方法是什么?

[英]What is the proper way to test a multi-step process in a Java Spring/Hibernate/Maven project?

最初,我只有一個進行單元測試所需的Java Servlet。 我想確保它可以正確處理請求,因此我在jUnit測試中使用了Spring的MockHttpServletRequest,該方法效果很好。 非常簡單的單元測試。

現在,我想擴展測試,並且要進行一系列數據庫事務處理並模擬http servlet請求,以模擬一段時間內使用系統的用戶。

我想我可以將所有這些都塞進一個單元測試中,但這似乎不正確,因為這會違反單元測試的精神。

那么以這種特定順序測試一系列事件的正確方法是什么?

這是我到目前為止的精簡版本:

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations={"testContext.xml"}) 
public class servletTest {

//Injected request
@Resource(name="mockTestServletRequest")
MockHttpServletRequest request;

@Test
public void mockRequest() {
    //perform a mock servlet request
}

那么,我是否僅通過在已有的方法上方和下方添加更多用@Test注釋的方法來模擬事件的時間軸? 我保證這些方法將按列出的順序執行嗎?

那將是一個集成測試。 看一下spring的測試框架 這意味着您將啟動Spring上下文,並運行所有內容。 您可以使用內存數據庫,也可以使用獨立數據庫。

當一切開始后,您可以注入您的控制器的一個實例並觸發一個請求,然后再發起一個請求。 默認情況下,每個方法都在事務中,該方法完成后會回滾,因此不必擔心會污染數據庫。

從測試心態的角度來看,我確實同意您的觀點,即真正的單元測試應該完全是這樣:可以測試代碼中的單個接觸點且不能超出此范圍的東西。

由於您正在使用Maven,因此實際上有一些不錯的選擇。 這里關於codehaus的建議可能很有價值。 通過模塊化“集成單元測試”,您可以將其分配給一個單獨的目標,並讓您更智能,更有組織的測試在那里生活。

我使用的另一個選項是在測試上添加注釋,如下所示:

@IfProfileValue(name="integration", value="true")

這使您可以設置是否只運行真正的單元測試或集成測試的參數。

最后,如果您正在使用開發數據庫並且希望繼續這樣做,那很好,但是如果這是一個連續的測試並且您沒有回滾,那么Mockito或其他模擬框架可能會很好地為您服務。 不過,這實際上取決於測試的環境。

暫無
暫無

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

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