2009-11-19 55 views
1

我已經創建了SEAM組件,它檢查是否存在至少一個具有全局管理權限的用戶,如果不存在,則創建一個。如何測試org.jboss.seam.postInitialization的觀察者是否可以正常工作

@Name("installer") 
@Stateless 
public class InstallerBean implements Installer, Serializable{ 
    @Observer("org.jboss.seam.postInitialization") 
    public void install() { 
     ... 
    } 

    public boolean isInstalled() { 
     ... 
    } 
} 

現在我需要測試安裝程序是否正常工作。我需要檢查isInstalled()是否返回true,並檢查數據庫中是否存在正確的用戶和角色。但是,在安裝完成之前,SeamT​​est.ComponentTest.testComponents()正在運行。我可以在日誌中看到我的安裝程序發出的最後一條消息出現在第二個測試執行的中間,所以我的測試隨機失敗。

我想測試我通過以下方式安裝:

public class InstallerTests extends SeamTest { 
    @Test 
    public void isInstalledTest() { 
     new ComponentTest() { 
      @Override 
      protected void testComponents() { 
       ... 
      } 
     } 
    } 

    ... 
} 

我怎樣才能讓我的測試開始我安裝compleated後?

我是新來的SEAM,所以也許我做的都是完全錯誤的。請告訴我,如果有更好的方法。

回答

0

也許你已經解決了你的問題。在執行install()期間,您是否異步調用某些方法?這可能會隨機延遲完成安裝。一個非常實用但不是最乾淨的解決方案是在測試用例中使用Thread.sleep(.)來等待安裝完成。

+0

這個問題沒有解決,主要是因爲我們決定從項目中刪除安裝程序組件,並使用import.sql文件進行數據庫初始化。 Tread.sleep()解決方案應該可以工作,但我現在不能嘗試。 – VestniK 2010-10-20 21:01:22