在前面的练习中,我们输出了定制的问候信息,现在我们将向工作流中添加If/Else逻辑来根据指定条件显示不同的问候信息。
在练习中,我们还是采用“先写测试”的方式,也就是说,首先根据新需求写测试用例,然后补充测试通过所必须的code。我们继续从上次的代码开始。
1、我们现在对我们的程序有个新的要求,如果输入的name包含奇数个字母,则我们的问候将以Greetings开始,否则以Hello开始,简单来说,我们的逻辑如下:
private static string SayHello(string userName) { string FirstWord = null; if (userName.Length % 2 == 0) FirstWord = "Hello"; else FirstWord = "Greetings"; return FirstWord + ", " + userName + " from Workflow 4"; }
下面我们在SayHelloFixture.cs文件创建一个新的测试方法ShouldReturnGreetingWithOddLengthName
[TestMethod] public void ShouldReturnGreetingWithOddLengthName() { var output = WorkflowInvoker.Invoke( new SayHello() { UserName = "Odd" }); string greeting = output["Greeting"].ToString(); Assert.AreEqual("Greetings Odd from Workflow 4", greeting); }
现在测试肯定是失败的,就不再演示了。
2、保存输出的第一个单词
我们将在If-Else逻辑中根据用户姓名的长度,将不同的值(“Hello”,“Greetings”)保存到一个变量中,最后将变量值加入到输出参数。下面我们在Sequence活动中创建一个字符串类型的Variable变量,变量名称FirstWorld。
在WF中,变量代表着数据存储,而参数表示数据流动,流入进Activity还是从activity流出。WF中的变量和C#中的变量一样,是有使用范围的。如果你在设计器中创建变量,但是又没有选中任何活动,那么是不可能添加变量的。一旦你选中某个活动,那么这个活动(也就是类)就是这个变量的使用范围,变量就是这个类内部的全局变量。言下之意,类中的变量在方法中是可以访问的。本例中,我们创建的变量属于Sequence活动,那么Sequence活动的WriteLine等其他活动是可以访问此变量的,但是,如果你在WriteLine中定义一个变量,在Sequence中是访问不了的。
3、从工具栏的“控制流”组中拖拽【If】活动到Sequence中,放在Assign活动之前。修改【If】活动的DisplayName为“If UserName is Even”(选中活动,按F4)。
4、输入If条件
在If的Condition下方的Expression文本框中输入If条件:
UserName.Length % 2 == 0
Expressions表达式是一段程序声明,可以是一个文本字符串,一个条件声明,或者是多个字符串的串联、方法的调用及对其他活动的调用。Expressions可以使用VB的语法编写,即使应用程序是C#的应用程序。
5、修改最下方的Assign活动,将Value文本框的值修改为:
FirstWord + UserName + " from Workflow 4"
6、再次运行测试,通过
系列文章
一 Hello Workflow4
二 The CodeActivity
三 Dynamic Workflows with XAML
四 Testing Workflows
五 WorkflowApplication
六 If/Else Logic