• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

软件测试中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方法。

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/

TAG: Activity 单元 软件测试 行为


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备2023014753号-2
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网