2013-01-11 42 views
1

我们有一些由步骤组成的测试工作流程。 现在我想构建类来表示它。数据流的设计模式

例如

Step 1: Get edit control for username 
Step 2: Write username into the control 
Step 3: Get edit control for password 
Step 4: Write password into the control 
Step 5: Click Login Button 

的问题是:我怎么能有这些步骤,方便地交换信息? 如何轻松使用步骤2的代码中的步骤1的编辑控件?

此刻,我只是有下面的代码:

public abstract class TestCase 
{ 
    // the Steps to build the test 
    public IList<TestStep> TestSteps { get; set; } 

    public TestCase() 
    { 
     this.TestSteps = new List<TestStep>(); 
    } 

    public abstract void Run(); 

    public override string ToString() 
    { 
     return this.GetType().Name; 
    } 
} 

public class TestStep 
{ 
    public int StepNumber { get; set; } 
    public Func<bool> StepFunc { get; set; } 
} 

现在我想在第一步的控制,用它在第二步等等。

想到具有不同StepFunc的返回值适合需要 或特定TestStep派生类中的成员。但是可能有更好的方法。

请注意:目前我无法一步完成此操作。

任何想法高度赞赏!

+0

步骤X需要步骤Y *和步骤Z的结果吗?例如,步骤X需要控制用户名和密码。 –

+0

当然,这可能是必要的。只是举了一个简单的例子,让它更容易谈论它。 –

+0

谁应该知道参数的来源?步骤X是否应该知道它需要步骤1和步骤3(而不是2和4)的结果,还是控制器应该知道?我认为你需要以某种方式“硬” - 对它进行编码,你不能为所有参数自动推导出正确的步骤。 –

回答

-1

介绍一个stepcontroller包含执行步骤和控制步骤的执行,当它执行步骤2时,它将步骤1的结果传递给步骤2.步骤2不应该有权访问步骤的编辑控制1,而是访问步骤1的结果,即步骤1的编辑控件中输入的文本。 当然也可以累计步骤的结果,以便步骤4的结果包含用户名和密码。

+1

谢谢! TestCase就像一个步进控制器。但是目前我还没有任何信息,哪一步需要哪些信息(现在不是外部建模)。 –

+0

您不能在每个测试用例的一个结果中累积所有信息。或者:测试用例的每个测试步骤都会对共享共享数据起作用,这是SUT。所有步骤都知道SUT。 – bitbonk

+0

SUT像被测试的结构?看起来像一个非常好的主意!有些步骤构建了结构,有些则使用它。你是这个意思吗? –