• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    軟件單元測試的測試用例編寫方法

    發布: 2010-9-10 08:28 | 作者: 網絡轉載 | 來源: 領測軟件測試網采編 | 查看: 298次 | 進入軟件測試論壇討論

    領測軟件測試網

    三、如何為每個測試方法單獨提供環境方法呢?
    通過前面的講解,相信大家對模板方法和回調函數模式都已經掌握了,這里直接給出相關代碼:
    /**
    * DAL層測試支持類.
    *
    *
    * 除非特殊情況,所有DAO都要繼承此類.
    *
    * @author tao.youzt
    */
    public abstract class GodzillaDalTestSupport extends AbstractDependencyInjectionSpringContextTests {
    /*
    * @see org.springframework.test.AbstractDependencyInjectionSpringContextTests#getConfigLocations()
    */
    @Override
    protected final String[] getConfigLocations() {
    String[] configLocations = null;
    String[] customConfigLocations = getCustomConfigLocations();
    if (customConfigLocations != null && customConfigLocations.length > 0) {
    configLocations = new String[customConfigLocations.length + 2];
    configLocations[0] = "classpath:godzilla/dal/godzilla-db-test.xml";
    configLocations[1] = "classpath:godzilla/dal/godzilla-dao.xml";
    for (int i = 2; i < configLocations.length; i++) {
    configLocations[i] = customConfigLocations[i - 2];
    }
    return configLocations;
    } else {
    return new String[] { "classpath:godzilla/dal/godzilla-db-test.xml",
    "classpath:godzilla/dal/godzilla-dao.xml" };
    }
    }
    /**
    * 子類可以覆蓋該方法加載個性化配置.
    *
    * @return
    */
    protected String[] getCustomConfigLocations() {
    return null;
    }
    /**
    * 準備測試環境.
    */
    protected void setupEnv() {
    }
    /**
    * 清除測試數據.
    */
    protected void cleanEvn() {
    }
    /**
    * 測試用例執行器.
    */
    protected abstract class TestExecutor {
    /**
    * 準備測試環境
    */
    public void setupEnv() {
    }
    /**
    * 執行測試用例.
    */
    public abstract void execute();
    /**
    * 清除測試數據.
    */
    public void cleanEnv() {
    }
    }
    /**
    * 執行一個測試用例.
    *
    * @param executor
    */
    protected final void execute(final TestExecutor executor) {
    execute(IgnoralType.NONE, executor);
    }
    /**
    * 執行一個測試用例.
    *
    * @param executor
    */
    protected final void execute(final IgnoralType ignoral, final TestExecutor executor) {
    switch (ignoral) {
    case NONE: {
    setupEnv();
    executor.setupEnv();
    executor.execute();
    executor.cleanEnv();
    cleanEvn();
    break;
    }
    case BOTH: {
    executor.execute();
    break;
    }
    case GLOBAL: {
    executor.setupEnv();
    executor.execute();
    executor.cleanEnv();
    break;
    }
    case LOCAL: {
    setupEnv();
    executor.execute();
    cleanEvn();
    break;
    }
    case GLOBAL_S: {
    executor.setupEnv();
    executor.execute();
    executor.cleanEnv();
    cleanEvn();
    break;
    }
    case GLOBAL_C: {
    setupEnv();
    executor.setupEnv();
    executor.execute();
    executor.cleanEnv();
    break;
    }
    case LOCAL_S: {
    setupEnv();
    executor.execute();
    executor.cleanEnv();
    cleanEvn();
    break;
    }
    case LOCAL_C: {
    setupEnv();
    executor.setupEnv();
    executor.execute();
    cleanEvn();
    break;
    }
    case BOTH_SETUP: {
    executor.execute();
    executor.cleanEnv();
    cleanEvn();
    break;
    }
    case BOTH_CLEAN: {
    setupEnv();
    executor.setupEnv();
    executor.execute();
    break;
    }
    case GLOBAL_S_LOCAL_C: {
    executor.setupEnv();
    executor.execute();
    cleanEvn();
    break;
    }
    case GLOBAL_C_LOCAL_S: {
    setupEnv();
    executor.execute();
    executor.cleanEnv();
    break;
    }
    }
    }
    /**
    * 忽略類型Enum.
    */
    public enum IgnoralType {
    /** 不忽略任何環境相關方法 */
    NONE,
    /** 忽略全局環境相關方法 */
    GLOBAL,
    /** 忽略局部環境相關方法 */
    LOCAL,
    /** 忽略所有環境相關方法 */
    BOTH,
    /** 忽略全局準備測試環境方法 */
    GLOBAL_S,
    /** 忽略全局清除測試數據方法 */
    GLOBAL_C,
    /** 忽略局部準備測試環境方法 */
    LOCAL_S,
    /** 忽略局部清除測試數據方法 */
    LOCAL_C,
    /** 忽略全部準備測試環境方法 */
    BOTH_SETUP,
    /** 忽略全部清楚測試數據方法 */
    BOTH_CLEAN,
    /** 忽略全局準備測試環境和局部清除測試數據方法 */
    GLOBAL_S_LOCAL_C,
    /** 忽略全局清除測試數據和局部準備測試環境方法 */
    GLOBAL_C_LOCAL_S
    }
    }
    /**
    * URL DAO測試類.
    *
    * @author tao.youzt
    */
    public class TestBizUrlDAO extends GodzillaDalTestSupport {
    private BizUrlDAO bizUrlDAO;
    @Override
    protected void setupEnv() {
    bizUrlDAO.delete("www.easyjf.com");
    }
    @Override
    protected void cleanEvn() {
    bizUrlDAO.delete("www.easyjf.com");
    }
    /**
    * 測試插入一條新數據.
    */
    public void testInsert() {
    execute(new TestExecutor() {
    @Override
    public void execute() {
    bizUrlDAO.insert(generateDO());
    assertNotNull(bizUrlDAO.getByUrl("www.easyjf.com"));
    }
    });
    }
    /**
    * 測試重復插入數據的情況.
    */
    public void testDuplicateInsert() {
    execute(new TestExecutor() {
    @Override
    public void setupEnv() {
    bizUrlDAO.insert(generateDO());
    }
    @Override
    public void execute() {
    try {
    bizUrlDAO.insert(generateDO());
    assertTrue("Must throw an exception!", false);
    } catch (Exception e) {
    assertTrue("Expect this exception.", true);
    }
    }
    });
    }
    /**
    * 測試刪除一條已經存在的數據.
    */
    public void testDelete() {
    execute(IgnoralType.GLOBAL_C, new TestExecutor() {
    @Override
    public void execute() {
    assertNotNull(bizUrlDAO.getByUrl("www.easyjf.com"));
    bizUrlDAO.delete("www.easyjf.com");
    assertNull(bizUrlDAO.getByUrl("www.easyjf.com"));
    }
    @Override
    public void setupEnv() {
    bizUrlDAO.insert(generateDO());
    }
    });
    }
    /**
    * 生成一個用于測試的DO.
    *
    * @return
    */
    private BizUrlSynchronizeDO generateDO() {
    BizUrlDO bizUrlDO = new BizUrlDO();
    bizUrlDO.setUrl("www.easyjf.com");
    bizUrlDO.setName("EasyJWeb");
    bizUrlDO.setEmail("webmaster@easyjf.com");
    return bizUrlDO;
    }
    public void setBizUrlDAO(BizUrlSynchronzieDAO bizUrlDAO) {
    this.bizUrlDAO = bizUrlDAO;
    }
    }
    注意testDeleate()方法,我們傳入了兩個參數,第一個參數IgnoralType.GLOBAL_C 代表忽略哪個方法,有12種類型可以設置。GLOBAL_C代表忽略全局的清除測試數據方法,其他見代碼注釋。
     

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/

    33/3<123

    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備10010545號-5
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>