1

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

在测试应该运行的每个环境中,我经常会有不同的数据,因此无法为测试参数指定硬编码值。一个简单的例子是检查每种类型的用户帐户是否能够登录,可以使用 DB 查询检索用户帐户凭据以在 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 中使用场景大纲和测试运行输入数据表,但这仍然是静态的,因此不符合要求。

我已经找了一段时间了,还没有在 SpecFlow 中找到像这样的任何东西,有没有人知道可以使用与上述类似的任何东西(或者如果从事该项目的任何人读到这个,则计划使用)?

谢谢 :)

4

1 回答 1

1

我不知道是否有这样的计划,但现在的问题是,当您通过 Visual Studio 编辑功能文件时,会有一个后台代码生成步骤。

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

所以你的过程会变成

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

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

于 2013-02-07T10:48:54.273 回答