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

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

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

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

    軟件測試中WF單元測試測試Activity的行為

    發布: 2010-5-06 13:57 | 作者: 網絡轉載 | 來源: 領測軟件測試網 | 查看: 28次 | 進入軟件測試論壇討論

    領測軟件測試網

    軟件測試中WF單元測試測試Activity的行為

    我們只是使用VSTS的單元測試工具,捕獲了一個期待的異常,這樣簡單的行為測試當然是不能滿足我們的需求的,我們要進一步測試Activity的更多,更復雜的行為。

      比如我們有一個LogActivity 負責寫日志,任何調用它的結果等同于調用一個ILog接口的一個Write()方法。我們就要寫一個單元測試,測試是否LogActivity的調用等同于對ILog接口的Write()方法的調用。

      有的人不禁要問了,這樣的測試如何做呢?我們的測試工具只支持Assert操作,難道我要去Check日志文件,看看兩個日志是否相等嗎?答案是否定的,我們不會這么做,因為這樣還屬于“狀態測試”的范疇,而不是“行為測試”。

      還好有人想到了這一點,提供給我們現成的工具,這就是Mock Object Framework。Mock Object Framework基于單元測試中的這樣幾個問題:

      1、在一個龐大的系統中,成百上千個類共同協調完成一個功能。往往一個調用的背后,是幾十個類在共同工作,而且很多類的創建很耗費資源和時間。在這樣的情況下,運行一個測試的代價可想而知,何況我們每次對代碼做一次改動,就要運行單元測試呢。

      2、很多代碼都需要調用外部資源,比如,讀取配置文件,讀取數據庫,調用遠程的Web Service等等。這樣的操作很費時間,最主要的是依賴外部的資源。如果外部資源處了問題,測試將無法進行下去。

      3、對系統的行為無法準確捕獲。一個簡單的調用,系統究竟調用了那些類的那個方法,調用了幾次,做了幾次查詢,修改,等等,一系列的操作都無法準確測試,難以保證單元測試的嚴謹性。

      基于以上幾點考慮(當然不是全部的),Mock Object Framework出現了。它解決了這些問題,

      所以成為了TDD的必備武器!

      Mock Object Framework的主要功能:

      1、Mock Object---顧名思義,就是模仿對象。正是由于單元測試中龐大的對象群的創建太耗費資源和時間,所以我們使用Mock Object來代替那些對象。Mock Object是輕量級的,代價很低,所以大大減少單元測試的開銷。

      2、對于一些需要訪問外部資源的對象,Mock可以用硬編碼代替對外部資源的訪問。從而提高效率。

      3、Mock Object Framework可以準確地記錄所模仿的對象的一切操作,使得我們可以準確地測試對象的行為是否符合要求。

      4、Mock Object Framework可以模仿接口,抽象類,或者尚未實現的類,從而加快開發速度。

      關于Mock Object Framework,大家可以去找一些資料。

      這里我們使用的是Rhino Mock。

      下面開始我們的單元測試:

      在前文的工程中,加入一個名叫的Activity,繼承自BaseEmployeeActivity。定義三個屬性:

    StoreNewAcmeEmployee
            public static readonly DependencyProperty
                    NewEmployeeProperty = DependencyProperty.Register("NewEmployee",
                        typeof(AcmeEmployee), typeof(StoreNewAcmeEmployee));

            public AcmeEmployee NewEmployee
            {
                get { return (AcmeEmployee)GetValue(NewEmployeeProperty); }
                set { SetValue(NewEmployeeProperty, value); }
            }

            public IEmployeeRepository EmployeeDataStore { get; set; }

            protected override ActivityExecutionStatus Execute(ActivityExecutionContext

    executionContext)
            {

                return ActivityExecutionStatus.Closed;
            }

      我們設定這個Activity的功能是:根據給定的參數,創建一個NewEmployee對象,把它存儲在EmployeeDataStore對象中。我們先不實現Execute()方法。

    注意:EmployeeDataStore會在后面使用依賴注入賦值。

      為了測試這個Activity,我們如法炮制,在測試工程中加一個新的Activity:StoreNewAcmeEmployee_Accessor,繼承自StoreNewAcmeEmployee。并Wrap它的Execute方法。

    延伸閱讀

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

    TAG: Activity 單元 軟件測試 行為


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