WF4.0 入门系列(四)Testing Workflows

 

到现在为止,我们的应用程序并不吸引眼球,它仅仅只是在控制台上进行了简单的输出而且没有接受任何的输入。真正有用的应用程序中应该包含一些输入、输入参数,同时,我们现在的应用程序也不利于测试。

在本次练习中,我们将在SayHello Activity中使用参数,同时会返回一些结果,这样可以使我们的活动不仅仅只是在控制台中简单的输出字符串,而且还可以被非控制台环境所调用。简单的说,我们希望SayHello活动能够达到下面的效果:

private static string SayHello(string name)
{
    return "Hello " + name + " from Workflow 4";
}

即根据输入,返回输出结果。
1、打开我们在上一练习中创建的HelloWorkflow解决方案,添加单元测试项目Test Project,测试项目名称为:HelloWorkflow.Tests

WF4.0 入门系列(四)Testing Workflows_第1张图片

2、在单元测试项目中添加对HelloWorkflow和System.Activities的引用,另外将UnitTest1.cs类重命名为SayHelloFixture.cs.重命名TestMethod1 方法名为ShouldReturnGreetingWithName

3、SayHello活动现在并没有接受任何参数,但是我们仍然可以调用该活动并假设它会接受某些参数。这可以帮助我们设计这些活动实现的接口。不必担心VS会提示属性或参数不存在。现在我们假设SayHello活动包含一个属性UserName,代码如下:

    [TestMethod]
    public void ShouldReturnGreetingWithName()
    {
        IDictionary<string, object> output;

        output = WorkflowInvoker.Invoke(
            new SayHello() { UserName = "Test" }
            );
            
        Assert.AreEqual("Hello Test from Workflow 4", output["Greeting"]);
    }


我们对活动的参数赋值有两种方式,一是对活动的参数(表现形式为公共属性)初始化,二是传递一个Dictionary<string, object>类型的集合参数给活动,集合的Key映射到活动的参数名,集合的Value值就是要赋给对应参数的值。

活动的输出参数类型是IDictionary<string, object>,其中包含活动中的所有输出参数。

4、现在编译测试项目,会出现以下错误

解决办法,在SayHello活动器中添加名为UserName的输入参数,以及名为“Greeting”的输出参数

 

 在WF中,参数代表着活动的输入数据流和输出数据流。一个活动有着参数集合,这个参数集合构成了活动签名,每一个参数都有一个指定的方向,输入|输出|输入并输出。

5、重新生成解决方案,成功。运行测试,失败

WF4.0 入门系列(四)Testing Workflows_第2张图片

从上图中我们可以看到由于输出参数Greeting为空,导致Assert失败。原因:我们在SayHello活动中只是将字符串内容输出到控制台,但是并没有为输出参数赋值。

6、使用Assign活动为参数赋值

删除原来的WriteLine基元活动,添加Assign基元活动

WF4.0 入门系列(四)Testing Workflows_第3张图片

右键打开Assign活动的属性窗口

WF4.0 入门系列(四)Testing Workflows_第4张图片

 

7、打开测试管理器

运行测试后,显示测试成功

 

系列文章:

一 Hello Workflow4

二 The CodeActivity

三 Dynamic Workflows with XAML

四 Testing Workflows

五 WorkflowApplication

六 If/Else Logic

 

你可能感兴趣的:(WF4.0 入门系列(四)Testing Workflows)