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

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

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

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

    Mock Objects:缺點和用例

    發布: 2008-6-19 17:43 | 作者: 不詳 | 來源: 測試時代編輯整理 | 查看: 73次 | 進入軟件測試論壇討論

    領測軟件測試網

      圖 3演示了一個緩存管理系統,負責把經常使用的對象存儲在緩存中,以提高系統的性能。這個緩存管理系統由一個接口(CacheManager)和兩個實現(DistributedCacheManager和EmbeddedCacheManager)組成,這兩個實現分別用于Web應用程序和富客戶端應用程序。

      假設需要引入一種配置方法,指導緩沖系統怎樣處理Exceptions 。如果系統處于生產階段,緩存系統中的錯誤應該不會終止系統的運行。換句話說,緩存系統拋出的任何Exception都應該忽略。另一方面,對于集成測試,我們需要獲取緩存拋出的所有Exception,對它們進行診斷并修復緩存系統中的實現缺陷。

      使用Decorator Pattern(裝飾模式)可以很容易解決這個問題。我們能很容易地為任何CacheManager動態添加異常處理,作為一種靈活的繼承替換方式。

    public final class IgnoreExceptionsCacheManagerDecorator implements CacheManager {
     
      private static final Object NULL = new Object();
      private static Logger logger = Logger.getAnonymousLogger(); 
     
      private final CacheManager decorated;
      
      public IgnoreExceptionsCacheManagerDecorator(CacheManager decorated) {
        this.decorated = decorated;
      }
      
      public Object getFromCache(String key) {
        try {
          return decorated.getFromCache(key);
        } catch (Exception e) {
          logger.log(SEVERE, "Unable to retrieve an object using key \"" + key + "\"", e);            
        }
        return NULL;
      }
     
      public void putInCache(String key, Object o) {
        try {
          decorated.putInCache(key, o);
        } catch (Exception e) {
          logger.log(SEVERE, "Unable to store the object " + o + " using key \"" + key + "\"", e);            
        }
      }
    }
      為了避免緩存系統中的任何錯誤導致產品中某些應用程序停止運行,我們僅需要使用IgnoreExceptionsCacheManagerDecorator :

      CacheManager cacheManager = new IgnoreExceptionsCacheManagerDecorator(new DistributedCacheManager());

      以下代碼演示了如何使用Mock(和EasyMockTemplate)來測試IgnoreExceptionsCacheManagerDecorator :

    public class IgnoreExceptionsCacheManagerDecoratorTest {
     
      private IgnoreExceptionsCacheManagerDecorator decorator;
      private CacheManager decoratedMock;
      
      @Before public void setUp() {
        decoratedMock = createMock(CacheManager.class);
        decorator = new IgnoreExceptionsCacheManagerDecorator(decoratedMock);
      }
      
      @Test public void shouldNotPropagateExceptionFromCache() {
        final String key = "name";
        final RuntimeException exception = new RuntimeException(); 

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


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(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>