SpecFlow - 如何使用NUnits TestCaseSource属性等数据驱动测试?

时间:2013-02-07 09:39:51

标签: testing dynamic specflow data-driven testcasesource

我是QA,经过一番考虑后决定使用SpecFlow进行测试自动化。我认为这很棒,但缺少一个我经常与其他测试运行器(如NUnit)一起使用的功能 - 类似于NUnit中的TestCaseSource属性,用于指定在运行时运行的测试的潜在动态数据集时间。

在测试运行的每个环境中,我经常会有不同的数据,因此无法为测试参数指定硬编码值。一个简单的例子是检查每种类型的用户帐户是否能够登录,可以使用数据库查询检索用户帐户凭据,以便在NUnit中动态填充每个测试用例:

public List<User> GetTestData()
{
    List<User> testData = new List<User>();
    testData = MyDatabase.GetAllUsersInfo().ToList();

    return testData;
}

[Test, TestCaseSource("GetTestData")]
public void CallLoginService(User user)
{
    var response = LoginController.TryLogin(User.UserName, User.Password);

    if (response.Error != null)
    {
        Assert.Fail("Failed to Login: {0}", response.Error);
    }

    Assert.AreEqual("Logged in ok", response.Message, "Login message not as expected");
}

显然,这是该功能的一个简单示例,但我认为它描述得很好。我知道我们在SpecFlow中有能力使用Scenario Outline和测试运行输入数据表,但这仍然是静态的,因此不符合要求。

我一直在寻找一段时间而且还没有在SpecFlow中找到任何类似的东西,有没有人知道任何类似于上面可以使用的东西(或者如果有人在这个项目上工作,那么会有计划吗?)< / p>

谢谢:)

1 个答案:

答案 0 :(得分:1)

我不知道是否有这样的计划,但目前问题是当你通过Visual Studio编辑你的特征文件时有一个后台代码生成步骤。

当它保存在Visual Studio中时,它会被解析并转换为feature.cs文件,这是编译并用于测试的文件。

所以你的过程将成为

  • 编辑您的数据源
  • 导出到要素文件
  • 获取specflow的VS插件以转换为feature.cs
  • 运行msbuild
  • 通过Nunit或类似的
  • 运行测试

我不会这样做。相反,我会专注于让我的测试成为更好的例子。听起来你要试图详尽地涵盖所有可能性。不要提供示例来涵盖所有可能的情况,而是用尽可能少的测试来覆盖尽可能多的逻辑。