BDD компонентов пользовательского интерфейса с WatiN и SpecFlow - PullRequest
4 голосов
/ 02 февраля 2011

Мой вопрос сосредоточен на том, соответствует ли моя установка в настоящее время передовому подходу относительно BDD с приемочным тестированием пользовательского интерфейса.Я использую WatiN с SpecFlow для создания приемочных тестов пользовательского интерфейса и развертываю свое приложение в AppHarbor (облачная платформа как сервис для приложений .Net).AppHarbor запускает ваши модульные / интеграционные тесты после развертывания и запускает ваш сайт только в том случае, если ваши тесты пройдены.Поэтому я сначала начал с написания базового теста на неудачу следующим образом:

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

Шаги, связанные с этим тестом, открывают браузер с помощью WatiN и проверяют, что атрибуту заголовка представления задано значение "Добро пожаловать".Я проверяю среду, чтобы решить, какой URL проверять в браузере WatiN.Например, если в процессе разработки перейдите к «http://localhost:49641/" для дома». В противном случае перейдите к «http://myappharborapp.com/".

». Моя проблема в том, что если вы развертываете это приложение впервые, страница или представление фактически не существуют ипоэтому тест не пройден (поскольку сайт еще не запущен).Это также не получится, если, например, я позже добавлю представление «О программе» и сначала напишу провальный тест.Когда я нажимаю обновления, тест не пройден, потому что страница «О программе» еще не существует.

Мой вопрос: не придерживаюсь ли я передового опыта в отношении того, как вы должны настраивать свои тесты пользовательского интерфейса?Как настроить эти тесты таким образом, чтобы они проходили в любой среде?

Любое понимание очень ценится!

1 Ответ

3 голосов
/ 03 февраля 2011

В «традиционных» тестах watin я использую пользовательские атрибуты, чтобы указать, в какой версии приложения и в какой среде оно выполняется, а затем тест пропускается, если критерии пропущены.

(код с открытым исходным кодом в http://testingstax.codeplex.com в примере Parkcalc> наблюдатель> монитор среды)

    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;
    }

Хитрость заключается в том, чтобы отобразить действие спецпотока, чтобы игнорировать тест

"Учитывая, что тест не запущен в производство" или что-то подобное

...