Assert.Pass Xunit NUnit MsTest бежать при условии - PullRequest
0 голосов
/ 17 мая 2018

Я пишу тест пользовательского интерфейса.Это для проверки страницы ошибки 404, которую я включил в Web.Config через;

<customErrors mode="On" redirect="~/Errors/"/>

Это все работает нормально, однако у меня только настраиваемые ошибки установлены на «Вкл.» В то время как в «UAT»среда разработки.Если я нахожусь в "Dev" или "IST", то я все еще хочу видеть ошибки ASP.Net по умолчанию.

Так что теперь вернемся к тесту пользовательского интерфейса с использованием Selenium

    public string GetAlertBoxDetails()
    {
        IWebElement alertBox = _driver.FindElement(By.CssSelector(".alert.alert-danger"));
        return alertBox.Text;
    }

Как выможно увидеть, что я обнаружил окно Bootstrap ".alert.alert-danger" и вернул текст внутрь.Затем я проверяю, содержит ли этот текст «Извините, эта страница не существует».Я использую Specflow для текстовой истории.

    [Then(@"The user should be told that no such page exists")]
    public void ThenTheUserShouldBeToldThatNoSuchPageExists()
    {
        string alertboxDetail = GetAlertBoxDetails();
        Assert.IsTrue(alertboxDetail.Contains("Sorry, that page doesn't exist."), "Couldn't find the message \"Sorry, that page doesn't exist.\"");
    }

Все это прекрасно работает, однако Я бы хотел, чтобы этот тест выполнялся только в среде UAT.Это связано с тем, что элемент ".alert.alert-danger" будет обнаружен только в том случае, если для customErrors установлено значение "Off".Для этого я включил этот шаг в тест.

    [Given(@"I am in the UAT environment")]
    public void GivenIAmInTheUATEnvironment()
    {
        var env = EnvironmentType;
        if (env != EnvironmentType.Uat)
        {
            Assert.Inconclusive($"Cannot run this test on environment: {env}. " +
                $"This test is only for the UAT environment.");
        }
        else
        {
            Assert.IsTrue(true);
        }
    }

Опять же, это прекрасно работает.Моя единственная проблема в том, что я не хочу использовать «Assert.Inconclusive», я бы предпочел «Assert.Pass» и сказать, что тест пройден, если он проводится в среде, отличной от UAT.

Я вижу XUnitимеет функцию Assert.Pass, но можно ли это сделать в MsTest?Принудительно пройти тест, не переходя к следующему утверждению.В спецпроцессе я выполняю «заданный» шаг, я бы хотел не дать ему перейти к шагу «Тогда».

1 Ответ

0 голосов
/ 23 мая 2018

WRT NUnit, вы можете попробовать Assert.Pass. Я не могу попробовать это прямо сейчас, когда я путешествую. Моя неуверенность в том, что я не уверен, будет ли это препятствовать запуску теста, если вы сделаете это в SetUp, что и дано для отображения Given.

По моему мнению, принимая искомое поведение, весь код принадлежит самому тесту, а не данным. Что бы обычно делали данные, это фактически создавали бы ситуацию, которую вы ожидали, то есть изменяли среду. Это, очевидно, здесь невозможно, поэтому я бы просто включил проверку среды в сам тест. Я бы даже не использовал Assert.Pass, если бы вам не нужно специальное сообщение, я бы просто пропустил тестовый код, если среда неверна. В качестве дополнительного преимущества этот подход работает для всех трех тестовых сред.

Хотя вы не спрашивали, я должен сказать, что инструкции, которые вам дали, чтобы показать, что тест пройден, даже если он не запущен, кажутся мне довольно сумасшедшими!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...