【问题标题】:Assert.Pass Xunit NUnit MsTest escape on conditionAssert.Pass Xunit NUnit MsTest 在条件下逃逸
【发布时间】:2018-05-17 11:44:46
【问题描述】:

我正在编写 UI 测试。这是为了检查我在 Web.Config 中启用的错误 404 页面;

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

这一切都很好,但是我只有在“UAT”开发环境中将自定义错误设置为“开”。如果我在“Dev”或“IST”中,那么我仍然希望看到默认的 ASP.Net 错误。

现在回到使用 Selenium 的 UI 测试

    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 环境中运行。这是因为只有在 customErrors 设置为“Off”时才能找到元素“.alert.alert-danger”。为此,我在测试中包含了这一步。

    [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 中完成吗?强制测试通过而不继续下一个断言。在 specflow 中,我正在运行“给定”步骤,我想阻止它继续执行“然后”步骤。

【问题讨论】:

  • 情况很有趣,但不清楚您的问题究竟是什么。请告诉我们您的实际要求。
  • 嗨@Charlie 抱歉不清楚。我已经重写了问题以包含更多代码示例。

标签: c# unit-testing nunit mstest xunit


【解决方案1】:

WRT NUnit,你可以试试 Assert.Pass。我现在不能亲自尝试,因为我正在旅行。我不确定的是,如果您在 SetUp 中执行测试,我不确定它是否会阻止运行测试,这就是 Given 映射到的。

我的观点是接受你寻找的行为,所有代码都属于测试本身而不是给定的。 Given 通常会做的是实际创建您期望的情况,即改变环境。这显然在这里不可能,所以我只需将环境检查放在测试本身中。除非您需要特殊消息,否则我什至不会使用 Assert.Pass,如果环境错误,我会跳过测试代码。另外一个好处是,这种方法适用于所有三个测试框架。

虽然你没有问,但我不得不说,即使测试没有运行,你得到的指示也表明测试通过,这对我来说似乎很疯狂!

【讨论】:

  • 嗨@Charlie 我就是这么做的。删除了 UAT 检查步骤,然后将该检查直接添加到最后两个步骤中。
猜你喜欢
  • 2016-10-30
  • 2015-06-10
  • 1970-01-01
  • 1970-01-01
  • 2014-11-20
  • 1970-01-01
  • 1970-01-01
  • 2012-06-23
  • 1970-01-01
相关资源
最近更新 更多