详解如何在WPF中创建测试工作流

日期: 2009-12-24 来源:TechTarget中国 英文

  到目前为止,这个程序并不是特别有趣。它只能在控制台中运行,并且不能接受任何的参数输入。大部分有意义的程序都必须能够处理输入输出数据。另外,现在的这个程序并不是很容易测试。

  在这个练习中,你将会修改SayHello活动,为其添加参数用于返回数据,而不是使用WriteLine活动将数据打印在控制台中,从而使之能在非控制台的程序中使用。这次我们使用一种测试优先的方式。首先,你需要建立你的测试项目,在一开始它会失败,然后你需要添加必要的代码让其通过。

  最终的程序将会等同于如下代码的功功能。 

以下是引用片段:
private static string SayHello(string name)
  {
  return “Hello ” + name + ” from Workflow 4″;
  }
  Private Shared Function SayHello(ByVal name As String) As String
  Return “Hello ” & name & ” from Workflow 4″
  End Function

    1.打开解决方案

  你可以使用练习4中建立的解决方案作为这个练习的起始方案。或者你可以根据以下步骤开始练习5。

  (1)选择Start | All Programs | Microsoft Visual Studio 2010以运行Microsoft Visual Studio 2010。

  (2)打开%TrainingKitInstallFolder%Labs IntroToWFEx5-TestingBegin目录下的练习5 的起始方案以开始这个练习。

  (3)按CTRL+SHIFT+B键编译解决方案。

  2.建立单元测试项目

  (1)首先我们为工作流建立单元测试来验证其运行结果正确与否。在Solution Explorer中,右键单击HelloWorkflow解决方案,选择Add / New Project并设置项目选项。

  ·选取Installed Templates,选择Visual C#或Visual Basic然后选择Test

  ·选择Test Project

  ·设置项目名称为HelloWorkflow.Tests

在解决方案中添加新的测试工程 (C#)

  在解决方案中添加新的测试工程 (C#)

 在解决方案中添加新的测试工程 (Visual Basic)

  在解决方案中添加新的测试工程 (Visual Basic)

  (2)右键单击HelloWorkflow.Tests项目,并单击Add Reference。选择Projects选项卡,添加HelloWorkflow为项目引用。重复以上步骤,使用.NET选项卡添加System.Activities库为引用。

  (3)右键单击UnitTest1.cs (C#)或UnitTest1.vb (Visual Basic),选择Rename并重命名为SayHelloTests.cs (C#)或SayHelloTests.vb (Visual Basic)。当提示重命名UnitTest1类时选择Yes。

  3.创建测试用例

    
  (1)添加下列命名空间到SayHelloTests.cs (C#) 文件或SayHelloTests.vb (Visual Basic):

以下是引用片段:
using System.Activities;
  using HelloWorkflow;
  Imports System.Activities

    (2)建立一个测试用例用于验证工作流执行正确。请打开SayHelloTests.cs (C#)或SayHelloTests.vb (Visual Basic),将TestMethod1方法重命名为ShouldReturnGreetingWithName。

  虽然目前SayHello活动并不接受任何参数,但是我们将会使用代码调用它,就像它能接受参数一样 。这将会让我们思考如何设计活动的接口并使用它。如果Visual Studio提示UserName属性没有被定义,请不要担心。替换ShouldReturnGreetingWithName 中的代码如下C#

以下是引用片段:
[TestMethod]
  public void ShouldReturnGreetingWithName()
  {
  IDictionary output;
  output = WorkflowInvoker.Invoke(
  new SayHello()
  {
  UserName = “Test”
  });
  Assert.AreEqual(“Hello Test from Workflow 4”, output[“Greeting”]);
  }
  Visual Basic
   Public Sub ShouldReturnGreetingWithName()
  Dim output = WorkflowInvoker.Invoke(
  New SayHello() With {.UserName = “Test”})
  Assert.AreEqual(“Hello Test from Workflow 4”, output(“Greeting”))
  End Sub

    如果向活动传入参数?

  你可以建立一个活动并使用对象初始化的方法初始化参数(它是一个public的属性),或者你可以使用Invoke函数的Dictionary (C#)或Dictionary(Of String, Object) (Visual Basic)参数,通过名称将数据映射到活动的参数上。

  如何取得工作流的输出数据?

  output变量是IDictionary(C#)或IDictionary(Of String, Object)(Visual Basic),它包含一组使用变量名作为关键字的数据映射。

  4.编译程序

  活动的输入输出接口看上去不错,但是程序还没有被编译过。我们第一个目标是使程序能编译成功。

  (1)按CTRL+SHIFT+B以编译程序,你将会看到编译失败

UserName没有定义(C#)

  UserName没有定义(C#)

 UserName没有定义(VB)
  UserName没有定义(VB)

  (2)在设计器中打开SayHello.xaml

  (3)单击Arguments按钮打开参数编辑窗口

单击Argument按钮打开参数编辑窗口

  单击Argument按钮打开参数编辑窗口

  (4)添加UserName和Greeting 参数,如下图所示

定义活动的参数

  定义活动的参数

  参数

  在Windows Workflow Foundation (WF),参数用于表示活动输入和输出的数据流。活动的参数组成了这个活动的特征。每个参数拥有一个定义好的方向:输入、输出或输入/输入。

  (5)按CTRL+SHIFT+B 编译解决方案,这次应该编译成功。

  5.观察测试运行失败

  观察测试运行失败的重要性在于确认我们的测试代码不存在bug导致测试在任何情况下都是通过的。 在这个任务中,我们将会确认我们的测试用例的的确确运行失败了。

  按CTRL+R,T以运行单元测试。测试用例将会运行但是失败,因为我们的活动的Greeting参数没有返回任何数据。

ShouldReturnGreetingwithName测试

  ShouldReturnGreetingwithName测试

  6.使测试通过

  现在我们知道我们的测试用例是工作的,我们需要做些最简单的工作让测试通过。

  (1)我们需要删除WriteLine 活动,因为在控制台中输出数据不能使我们的测试通过,右击WriteLine 活动并选择Delete ( )。

  (2)我们需要为Greeting赋值。首先,在工具栏中选择Primitives 组,拖放Assign活动到设计器中。

拖放Assign活动到设计器

  拖放Assign活动到设计器

  (3)设置To属性为Greeting

在左边的输入框中输入Greeting

  在左边的输入框中输入Greeting

  (4)我们可以在设计器上输入问候的表达式,由于我们的表达式更长,所以使用属性窗口。单击Value属性右边的按钮,弹出参数编辑器。

单击Value属性右边的按钮

  单击Value属性右边的按钮

  (5)在参数编辑器中,你可以输入更长的表达式,包括VB的换行字符“_”。设置参数为”Hello ” & UserName _& ” from Workflow 4″

使用Assign活动为Greeting参数赋值

  使用Assign活动为Greeting参数赋值

  如果你是C#程序员,你可能不是很熟悉Visual Basic的语法。在Visual Basic的语法中,如果你需要将一个表达式跨行书写,你需要用下划线表示表达式在下移行中继续。

  (6)按CTRL+SHIFT+B编译解决方案,应该编译通过。

  7.验证

  现在我们准备运行测试用例并观察我们的活动通过这个测试

  (1)打开Test View窗口。在Test菜单中选择Windows并单击Test View ( )。

  (2)在Test View窗口中,选择ShouldReturnGreetingWithName测试并单击Run Selection 按钮( )。

选择并运行ShouldReturnGreetingWithName测试

  选择并运行ShouldReturnGreetingWithName测试

  注意

  由于Visual Studio 2010 Beta 2在运行测试时不会自动保存XAML文件。在运行测试前你必须手动编译你的解决方案,否则他将继续失败。

  (3)验证测试通过。

  测试通过

  测试通过

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

相关推荐