[英]How to mock/stub Java container in unit testing?
我有一個實現ServletContextListener
的對象,根據Java EE servlet規范,它在部署/啟動時由servlet容器通過其contextInitialized(ServletContext)
方法調用。
我正在嘗試編寫一個單元測試,模擬一個servlet容器啟動並部署我的ServletContextListener
(以便我可以確定應用程序是否正確初始化)。
這是可能的,如果是的話,怎么樣? 它是特定於容器的嗎? 如果是這樣我正在使用OGS。 尋找代碼看起來是這樣的 :
@Test
public void shouldBootstrapAppAtDeployTime() {
// Given
GlassFishContainer container = new GlassFishContainer(); // ha!
MyApp app = mock(MyApp.class); // MyApp implements ServletContextListener
// When - deploy app to container
// Causes app.contextInitialized(ServletContext) to be called
container.deploy(app);
// Then - verify the method was called with any ServletContext
mock.verify(app.contextInitialized(Matchers.any());
}
這是一個草率的偽代碼,其中有一些實施不當的Mockito用於演示目的(只是為了實現我的意圖)。 提前致謝!
也許你可以用Arquillian解決這個問題: http ://arquillian.org/features/
從網頁:
Arquillian將您的測試帶到運行時,使您可以訪問容器資源,有意義的反饋以及有關代碼實際工作方式的見解。
我認為你的方法有點誤。 你的單元測試偽代碼所做的是測試它正確調用你的ServletContextListener的容器邏輯 - 我會相信容器正確地做了。
我要做的是直接測試你的監聽器類,實例化它,使用模擬ServletContext調用contextInitialized()方法(我看到你熟悉Mockito,這是一個很好的工具!),如果你的ServletContextListener你做斷言按預期完成了它的工作。
不確定是否有這樣的測試框架 。 即使它存在,也不會在真實環境中進行測試 (可能與測試環境不同)。
編寫此類測試用例的最佳方法是:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.