2013-06-13 60 views
0

我意識到在運行導致問題的arquillian測試用例期間,會使用一些未添加到我的shrinkWrap存檔中的類。我的Arquillian測試用例中提供了哪些類別的應用程序?

我在我的應用程序配置的引導功能,像這樣

公共無效啓動(@Observes StartupEvent startupEvent, 的ExternalContext的ExternalContext,應用程序, ProjectStage deltaspikeProjectStage)

簽名(當JSF準備就緒並且正在運行時,會發送startUpEvent)並且不會添加ShrinkWrap,但是當我運行測試用例時,它們會調用我的引導功能。 這個不必要的通話毀了每一件事。當我評論這個函數時,我的測試用例工作正常。

我在想,可用類爲我的測試用例應該被添加到拆封檔案與命令一樣

WebArchive webArchive= ShrinkWrap 
        .create(WebArchive.class, "ROOT.war") 
        .addClasses(CdiTestBean.class,PersistenceListener.class) 

但似乎我錯了。我應該怎麼做才能讓一個課程無法使用shrinkWrap檔案!

+0

您的完整測試和網絡存檔如何顯示?你使用什麼類型的Arquillian容器?是否有例外?你能提供更多的上下文嗎? – Hardy

+0

讓我再次解釋這個問題,在我的應用程序中,我有一個使用Observer監聽JSF的引導函數(你可以在這個問題中找到這個函數)。當我運行我的tomcat並加載應用程序時,該函數將被調用。我的問題是,當我運行我的arquillian測試用例時,這個函數也在調用(我不想調用它)。我沒有將啓動函數添加到我的ShrinkWrap存檔中,因此如何找到arquillian測試用例並調用此啓動函數!我在嵌入式tomcat7上使用Arquillian與CDI和Hibernate – Yashar

回答

1

如果您使用的是可能是問題的嵌入式容器,因爲所有的CDI bean都位於同一個類路徑中。因此他們可能被嵌入式容器/ cdi實現掃描。如果可能的話,儘量使用託管版本,這應該給你適當的隔離。

+0

我在想我的測試案例只知道已經添加到我的ShrinkWrap archicve中的類,但看起來你是對的。我創建了兩個實體管理器,一個是我的測試用例,我將它包含在我的shrinkwrap archice中,另一個用於整個應用程序(我沒有將這個包含在我的shrinkwrap中),並且我注入了實體管理器在我的測試案例中,直到我爲我的測試實體管理器 – Yashar

+0

編寫了一個限定符,是否有任何方法可以避免在我的嵌入式容器中出現這種類型的問題?我不想自動掃描,我只想使用已添加到Shrinkwrap存檔中的類來工作 – Yashar

+0

不要使用嵌入式容器:-)爲什麼不使用遠程程序? – Hardy

0

之前返回webArchive加入這一行:

new ZipExporterImpl(webArchive).exportTo(new File(System.getProperty("java.io.tmpdir"), "myWebArchive.war"), true); 

這將您的Web歸檔保存到Java的臨時系統文件夾中的文件。

提取戰爭來檢查是否所有必需的類都存在。

調用方法addClasses(Class... classes)應該將這些類添加到戰爭中。

+0

我在我的應用程序中有一個類沒有包含在我的ShrinkWrap中,我不需要它在ShrinkWrap中,但是當我運行測試用例時,可以看到在我的控制檯中有一個問題與這個類的其中一個功能有關(不滿意的依賴)。我想知道我是不是將它包含在我的ShrinkWrap中爲什麼我的測試用例可以調用其中一個函數 – Yashar

+0

您應該能夠看到哪個方法試圖從堆棧跟蹤中缺少的類中調用方法。 –

相關問題