WEB开发网
开发学院软件开发C语言 WF单元测试系列3:测试Activity的行为 阅读

WF单元测试系列3:测试Activity的行为

 2010-10-01 08:19:39 来源:WEB开发网   
核心提示: 我们设定这个Activity的功能是:根据给定的参数,创建一个NewEmployee对象,WF单元测试系列3:测试Activity的行为(3),把它存储在EmployeeDataStore对象中,我们先不实现Execute()方法,即传什么参数都一样, } //回放Mock对象的操作,注意:E

我们设定这个Activity的功能是:根据给定的参数,创建一个NewEmployee对象,把它存储在EmployeeDataStore对象中。我们先不实现Execute()方法。注意:EmployeeDataStore会在后面使用依赖注入赋值。

为了测试这个Activity,我们如法炮制,在测试工程中加一个新的Activity:StoreNewAcmeEmployee_Accessor,继承自StoreNewAcmeEmployee。并Wrap它的Execute方法。

接下来添加一个测试类:StoreNewAcmeEmployee_ActivityShould。记得引用Rhino.Mocks库。

先把代码贴出来:

StoreNewAcmeEmployee_ActivityShould
using System;
using AcmeCorp.DomainLibrary.AcmeEmployeeDomain;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using NewEmployeeWFLibrary.Activities;
using NewEmployeeWFLibrary_Test.Helpers;
using Rhino.Mocks;//引用Rhino Mock库

namespace NewEmployeeWFLibrary_Test.Activities
{
    [TestClass]
    public class StoreNewAcmeEmployee_ActivityShould
    {
        //被Mock的对象,将被注入到StoreNewAcmeEmployee的EmployeeDataStore属性。
        private IEmployeeRepository _mockEmployeeRepository;
       
        //Mock功能类
        private MockRepository _mocker;

        [TestInitialize]
        public void TestInitializer()
        {
            //初始化Mock功能类          
            _mocker = new MockRepository();

            //创建Mock对象
            _mockEmployeeRepository = _mocker.CreateMock<IEmployeeRepository>();
        }

        [TestMethod]
        public void CallAddOnTheRepo()
        {
            //记录Mock对象的操作
            using (_mocker.Record())
            {
                _mockEmployeeRepository.Add(null);
                LastCall.IgnoreArguments();//忽略上面的null参数,即传什么参数都一样



            }

            //回放Mock对象的操作,Rhino Mock会自动检验对被Mock的对

象_mockEmployeeRepository的操作与上面记录的是否一致
            //如果不一致,就会自动抛出异常
            using (_mocker.Playback())
            {
                using (StoreNewAcmeEmployee_Accessor activity = new

StoreNewAcmeEmployee_Accessor())
                {
                    SetActivityProperties(activity, Mother.FIRST_NAME,

Mother.LAST_NAME, Mother.EMAIL,
                                          _mockEmployeeRepository);
                    activity.Execute_Accessor(null);
                }
            }
        }
       

        private void SetActivityProperties(StoreNewAcmeEmployee activity, string

firstName, string lastName,
                                           string email, IEmployeeRepository

employeeRepo)
        {
            activity.FirstName = firstName;
            activity.LastName = lastName;
            activity.Email = email;
            activity.EmployeeDataStore = employeeRepo;//注入被Mock对象
        }
    }
}

上一页  1 2 3 4 5 6  下一页

Tags:WF 单元

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接