具有WatiN和SpecFlow的UI组件的BDD

时间:2011-02-02 16:01:53

标签: watin bdd specflow

我的问题集中在我的设置目前是否遵循关于BDD和UI验收测试的最佳实践方法。我正在使用WatiN和SpecFlow来构建我的UI验收测试,我正在将我的应用程序部署到AppHarbor(一个云平台作为.Net应用程序的服务)。 AppHarbor在部署时运行您的单元/集成测试,只有在测试通过后才会将您的站点推送到现场。所以我首先编写了一个基本的失败测试,​​如下所示:

Scenario: Navigation to homepage
          When I navigate to /
          Then I should be on the application homepage

与此测试相关的步骤使用WatiN打开浏览器,并验证视图的title属性是否设置为“Welcome”。我正在检查环境以确定使用WatiN浏览器测试哪个URL。例如,如果在开发中导航到home的“http:// localhost:49641 /”。否则,请导航至“http://myappharborapp.com/”。

我的问题是,如果您是第一次部署此应用程序,则页面或视图实际上不存在,因此测试失败(因为该站点尚未生效)。如果我稍后添加“关于”页面视图并首先编写失败的测试,这也会失败。当我推送更新时,测试将失败,因为“关于”页面尚不存在。

我的问题是:我是否没有遵循关于如何设置UI测试的最佳实践?如何设置这些测试以便它们在任何环境中传递?

非常感谢任何见解!

1 个答案:

答案 0 :(得分:3)

在“传统”的watin测试中,我使用自定义属性来指定应用程序的版本及其运行的环境,如果错过了标记,则跳过测试。

(该代码是parkcalc示例>观察者>环境监视器中http://testingstax.codeplex.com处的开源代码)

    internal static void CheckSetEnvironment()
    {
        Object[] attributes = Utility.GetCallerAttributes(typeof(ExecutionEnvironment), 3);

        CheckEnvironment(attributes);
    }

    private static void CheckEnvironment(Object[] attributes)
    {
        TestEnvironment = GetCurrentEnvironment();

        if (attributes.Length > 0 && !attributes.Contains(new ExecutionEnvironment(TestEnvironment)))
        {
            Assert.Inconclusive("This test is not designed to be executed in the '" + TestEnvironment.ToString() + "' environment.");   
        }
    }

    private static EnvironmentType GetCurrentEnvironment()
    {
        string currentEnvironment = ConfigurationManager.AppSettings["Environment"].ToLower(CultureInfo.CurrentCulture);
        EnvironmentType Environment = new EnvironmentType();

        try
        {
            Environment = (EnvironmentType)Enum.Parse(typeof(EnvironmentType), currentEnvironment, true);
        }
        catch (System.ArgumentException)
        {
            Assert.Fail(" The current environment setting in 'Environment' in the app.config is invalid.");
        }
        return Environment;
    }

然后诀窍是映射specflow动作以忽略测试

“鉴于测试未在生产中运行”或类似的东西