使用示例步骤中的关键字字符串参数化specflow步骤

时间:2018-04-29 05:37:35

标签: specflow

我是specflow的新手,需要有关如下所示的specflow场景的帮助。

Scenario Outline: Error messages validation for maximum allowed term rule
Given a <product>  
When term exceeds the max allowed term 
Then this <errormessage> is displayed

Examples: 
| product    | errormessage                 |
| ProductA   | This is an error message 1   |
| ProductB   | This is an error message 2   |
| ProductC   | This is an error message 3   |

对于最后一步定义“*然后这个错误消息显示”步骤,我想重用现有的绑定方法
然后显示<。

此现有绑定方法将字符串作为参数(预期的错误消息),并根据从测试中的应用程序中挑选的实际消息对其进行断言。

但是当我按原样使用该方法时 - 它无法将错误消息内容作为字符串数组传递。有人能够帮助我理解我需要做些什么来使其发挥作用吗?

下面的绑定方法示例。步骤然后显示这个不能识别这个绑定,它要求我写另一个方法。

[Then(@"this ""(.*)"" is displayed")]
public void ThenErrorMessageIsDisplayed(string errorMessage)
{
    var msg = uServiceSupport.GetMessages(responseData);
    var found = new JObject();

    // due to multiple error and warning messages
    foreach (var elem in msg)
    {
        if (elem["message"].ToString().Contains(errorMessage))
            found = (JObject)elem;
    }

    try
    {                
        Assert.IsTrue(found.HasValues, "Check if response has warning/error message");
        Assert.AreEqual(errorMessage, found["message"].ToString(), "Check if the error message is {0}", errorMessage);
    }            
    catch (AssertionException)
    {
        Helper.LogInfo(string.Format("Response:\n {0}", JObject.Parse(responseData)));
        throw;
    }

}

1 个答案:

答案 0 :(得分:0)

问题在于你的步骤正则表达式。你有这个:

[Then(@"this ""(.*)"" is displayed")]

但是你试着这样称呼它:

Then this <errormessage> is displayed

您没有"的一致用法。你需要:

[Then(@"this (.*) is displayed")]

Then this "<errormessage>" is displayed