到目前为止,这个程序并不是特别有趣。它只能在控制台中运行,并且不能接受任何的参数输入。大部分有意义的程序都必须能够处理输入输出数据。另外,现在的这个程序并不是很容易测试。
在这个练习中,你将会修改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#)
在解决方案中添加新的测试工程 (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没有定义(VB)
(2)在设计器中打开SayHello.xaml
(3)单击Arguments按钮打开参数编辑窗口
单击Argument按钮打开参数编辑窗口
(4)添加UserName和Greeting 参数,如下图所示
定义活动的参数
参数
在Windows Workflow Foundation (WF),参数用于表示活动输入和输出的数据流。活动的参数组成了这个活动的特征。每个参数拥有一个定义好的方向:输入、输出或输入/输入。
(5)按CTRL+SHIFT+B 编译解决方案,这次应该编译成功。
5.观察测试运行失败
观察测试运行失败的重要性在于确认我们的测试代码不存在bug导致测试在任何情况下都是通过的。 在这个任务中,我们将会确认我们的测试用例的的确确运行失败了。
按CTRL+R,T以运行单元测试。测试用例将会运行但是失败,因为我们的活动的Greeting参数没有返回任何数据。
ShouldReturnGreetingwithName测试
6.使测试通过
现在我们知道我们的测试用例是工作的,我们需要做些最简单的工作让测试通过。
(1)我们需要删除WriteLine 活动,因为在控制台中输出数据不能使我们的测试通过,右击WriteLine 活动并选择Delete ( )。
(2)我们需要为Greeting赋值。首先,在工具栏中选择Primitives 组,拖放Assign活动到设计器中。
拖放Assign活动到设计器
(3)设置To属性为Greeting
在左边的输入框中输入Greeting
(4)我们可以在设计器上输入问候的表达式,由于我们的表达式更长,所以使用属性窗口。单击Value属性右边的按钮,弹出参数编辑器。
单击Value属性右边的按钮
(5)在参数编辑器中,你可以输入更长的表达式,包括VB的换行字符“_”。设置参数为”Hello ” & UserName _& ” from Workflow 4″
使用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测试
注意
由于Visual Studio 2010 Beta 2在运行测试时不会自动保存XAML文件。在运行测试前你必须手动编译你的解决方案,否则他将继续失败。
(3)验证测试通过。
测试通过
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
相关推荐
-
.NET架构师:函数式语言做领域驱动设计
Scott一位.NET架构师,同时也是掌握函数式编程的作者,他很欣赏函数式编程,对于Scott来说,面向对象编程的那些概念也很恐怖,比如多态、泛型、继承、协变等。
-
软件开发就像炒股 关键看你怎么选股票!
本文作者Paulo Ortins在这里分享了对于选择哪种编程语言作为软件开发工作的起点的话题,并阐述了自己的观点。
-
增进离岸Java开发效率的十个提示
近日,Cygnet Infotech公司发布了一篇博文,谈到了如何增进离岸Java开发的效率。众多的ISV与软件厂商总是在不断寻找能以最低的代价实现其业务目标的解决方案。
-
Visual Studio 2013增强调试功能
Visual Studio 2013包含了若干诊断特性,能够帮助开发人员有效地调试他们的应用程序。