<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    eclipse+JUnit測試Seam

    Posted on 2011-04-29 17:04 terryxue 閱讀(2063) 評論(0)  編輯  收藏 所屬分類: java
    折騰了一天,junit終于可以跑起來了,分享一下,希望對大家能有幫助。
    項目基于Maven搭建(Maven確實是個好東西)。使用的技術有jsf + richfaces3.3 + seam2.2 + hibernate3.3 + jasperreport3.7。感覺seam很強大,但沒有spring方便,至少在測試方面要花費一翻功夫。
    我沒有將測試代碼放到項目的測試目錄下,而是另起了一個工程,專用于測試,以下就完整的介紹一下這個過程。更多是步驟描述了,為什么要這樣做就不多解釋了,也沒能力解釋清楚。
    1. 建立測試工程:seamtest。最簡單的maven工程即可。這里不介紹如何在eclipse中集成maven,讀者可以搜搜m2eclipse,這是一個eclipse插件。

    2. 配置seamtest的pom.xml,增加如下三個依賴:
    <dependency>
        
    <groupId>org.jboss.seam.embedded</groupId>
        
    <artifactId>hibernate-all</artifactId>
        
    <version>beta3.SP10</version>
    </dependency>
    <dependency>
      
    <groupId>org.jboss.seam.embedded</groupId>
      
    <artifactId>jboss-embedded-all</artifactId>
      
    <version>beta3.SP10</version>
    </dependency>
    <dependency>   
      <
    groupId>org.jboss.seam.embedded</groupId>
      
    <artifactId>thirdparty-all</artifactId>
      
    <version>beta3.SP10</version>
    </dependency>

    3. 這三個依賴需要從jboss倉庫下載,可以訪問這個站點:https://repository.jboss.org/nexus/index.html,然后根據上面提供的構件Id進行搜索,或者直接將倉庫指向:https://repository.jboss.org/nexus/content/repositories/releases/。如何在settings.xml文件中配置倉庫地址不難,google下吧。

    4. 將需要測試的項目及junit加到maven依賴中,我的配置為:
    <dependency>
      
    <groupId>cn.terry</groupId>
      
    <artifactId>target-web</artifactId>
      
    <version>0.0.1-SNAPSHOT</version>
      
    <type>war</type>
    </dependency>
    <dependency>
      
    <groupId>junit</groupId>
      
    <artifactId>junit</artifactId>
      
    <version>4.8.2</version>
      
    <type>jar</type>
    </dependency>
    上面的“target-web”就是我要測試的基于maven構建的項目。

    5. 保存配置后等待eclipse下載完所有依賴的jar包。

    6. 將目標工程加到測試工程的依賴工程中。參考下圖:


    7. 下載Embedded JBoss,下載地址:http://sourceforge.net/projects/jboss/files/Embedded%20JBoss/Embedded%20JBoss%20Beta%203/

    8. 解壓縮下載的壓縮后,找到文件夾:bootstrap,除這個文件夾外,其它下載文件在我們這個案例里面都不需要用到。

    9. 將bootstrap文件夾鏈接到測試工程的source下面,參考如下操作界面:


    10. 將target-web的webapp目錄鏈接到測試工程的source下面,這一步比較奇怪,不多解釋了,照著做就行了。

    11. 配置DataSource。在bootstrap/deploy下面有文件hsqldb-ds.xml,注意文件名的結尾部分是“-ds.xml”,你可以按這個命名規則建立自己需要的datasource文件,如oracle-ds.xml。datasource文件具體怎么寫,就要參考hsqldb-ds.xml了,這個還是比較容易的。如果你的項目不需要dataSource的話就跳過這一步吧。

    12. 接下來開始寫測試代碼了,如下二個類直接復制過去用:
    MySeamTestBase: 其它測試類可以直接繼承該類
    package cn.terry.test;

    import java.util.Properties;

    import org.jboss.seam.mock.AbstractSeamTest;
    import org.junit.After;
    import org.junit.AfterClass;
    import org.junit.Before;
    import org.junit.BeforeClass;
    import org.junit.Test;

    public class MySeamTestBase extends AbstractSeamTest {
        
    // static helper instance to call non static methods in
        
    // a static method
        private static MySeamTestBase seamTest = new MySeamTestBase();
        
    private static boolean batch = false;

        
    /*
         * JUnit test life cycle methods.
         
    */

        @BeforeClass
        
    public static void setUpBeforeClass() throws Exception {
            
    if (!batch) {
                seamTest.startContainer();
            }
        }

        @AfterClass
        
    public static void tearDownAfterClass() throws Exception {
            
    if (!batch)
                seamTest.stopContainer();
        }

        @Before
        
    public void setUp() throws Exception {
            setupClass();
            begin();
        }

        @After
        
    public void tearDown() throws Exception {
            end();
            cleanupClass();
        }

        
    /*
         * Helper methods
         
    */

        
    // starts the JBoss embedded ejb container
        public void startContainer() throws Exception {
            
    super.startSeam();        
        }

        
    // stops the JBoss embedded ejb container
        public void stopContainer() throws Exception {
            
    super.stopSeam();
        }
        
        
    public boolean isBatch() {
            
    return batch;
        }

        
    // used by a JUnit.Suite runner to set the batch flag
        public void setBatch(boolean fBatch) {
            batch 
    = fBatch;
        }
    }


    MySuiteRunner, 批量執行多個測試類:
    package cn.terry.test;

    import org.junit.AfterClass;
    import org.junit.BeforeClass;
    import org.junit.runner.RunWith;
    import org.junit.runners.Suite;

    import cn.terry.test.testcase.HelloTest;

     
    @Suite.SuiteClasses({ 
        HelloTest.
    class
    })
    @RunWith(Suite.
    class)
    public class MySuiteRunner {
        
    private static MySeamTestBase seamTest = new MySeamTestBase();
     
        @BeforeClass
        
    public static  void setUpBeforeClass() throws Exception {    
            
    // set the flag to signal batch mode
            seamTest.setBatch(true);
            seamTest.startContainer();
        }
     
        @AfterClass
        
    public static void tearDownAfterClass() throws Exception {        
            seamTest.stopContainer();
            seamTest.setBatch(
    false);
        }
    }

    下面的HelloTest是一個具體的測試類,模仿著寫就行了:
    package cn.terry.test.testcase;

    import org.junit.Test;

    import cn.terry.test.MySeamTestBase;

    public class HelloTest extends MySeamTestBase {
        @Test
        
    public void testRollback() throws Exception{
            
    new FacesRequest() {
                
    protected void invokeApplication() throws Exception {
                    Object seamInstance 
    = getInstance("instanceName");
                }
            }.run();
        }

    }
    FacesRequest里面還有許多方法可以重寫,自己翻翻手冊吧。


    13. 到執行這一步了,也不容易,如果是jdk6的話,要在運行時加上運行參數:-Dsun.lang.ClassLoader.allowArraySyntax=true。eclipse中如何配置請參考如下界面:

    點擊run,享受成果吧。

    14,可能沒有這么幸運,數據庫連接池可能沒有初始化。在我們的項目中,連接池是在一個servlet listener中初始化的,通過如上方式運行就沒法自動初始化,導致測試時出現數據庫連接失敗的情況,這時候需要自己寫些代碼去初始化連接了。

    總結:整個過程可能會出現沒完沒了的異常,別放棄,多google,總會成功的。

    posts - 9, comments - 24, trackbacks - 0, articles - 0

    Copyright © terryxue

    主站蜘蛛池模板: 亚洲不卡影院午夜在线观看| 伊人久久综在合线亚洲91| 久久亚洲AV无码精品色午夜麻豆 | 四虎免费久久影院| 亚洲成AV人影片在线观看| 四虎成人免费影院网址| 亚洲国产成人无码AV在线| 国产黄色片在线免费观看| 亚洲国产成人久久一区二区三区| 我要看WWW免费看插插视频| 亚洲愉拍一区二区三区| 色视频色露露永久免费观看| 亚洲AV日韩综合一区| 国产成人精品男人免费| 免费人成大片在线观看播放电影| 免费在线观看黄网站| 成人免费一区二区三区 | 1000部羞羞禁止免费观看视频 | 一区二区三区免费视频播放器| 免费一看一级毛片| a国产成人免费视频| 亚洲AV本道一区二区三区四区| 久久国产免费观看精品3| 亚洲日韩国产精品乱-久| 国产一级一片免费播放| 国产午夜精品理论片免费观看| 国产精品亚洲аv无码播放| 亚洲视频免费在线播放| 亚洲sm另类一区二区三区| 亚洲日韩人妻第一页| 久久精品免费电影| 亚洲已满18点击进入在线观看| 国产精品嫩草影院免费| 国产成人无码区免费网站| 亚洲国产成人91精品| 免费在线黄色网址| 久久99精品免费视频| 亚洲乱码国产乱码精华| 国产亚洲精品a在线观看app| 国产卡一卡二卡三免费入口| 未满十八私人高清免费影院|