【问题标题】:How to fail test if result is not found in a loop c#如果在循环c#中找不到结果,如何测试失败
【发布时间】:2017-01-05 14:50:42
【问题描述】:

我有一个 for 循环,我在其中查找与我作为参数输入的内容相匹配的属性。当找到它时它会通过,但是当它没有找到时,它会继续循环。如果找不到,我需要一种方法让测试失败。

foreach (IWebElement link in links)
{
    string text = link.GetAttribute("alt");
    if (text == transportMode)
    {
        Assert.AreEqual(text, transportMode);
    }
}

【问题讨论】:

  • 当条件不满足时,你当然可以只breakthrow
  • 集合中的每个成员是否需要匹配,还是只需要一个?
  • 如果值与您的 if 子句不相等,您将跳过断言。不要测试然后断言,只需断言。

标签: c# loops selenium testing


【解决方案1】:

无需在循环内断言(因为您的if 语句检查完全相同)。如果你发现它,就跳出测试。否则在测试结束时失败:

foreach (IWebElement link in links)
{
    string text = link.GetAttribute("alt");
    if (text == transportMode)
    {
        return;
    }
}
Assert.Fail("not found");

你可能想想一个比我用的更聪明的信息。

【讨论】:

  • 谢谢。这解决了我的问题。
  • OP 在 if 语句中使用了花括号。请不要以示例的方式鼓励不要使用它们。
  • @jibbs 好的,我改了。
【解决方案2】:

你没有提到这是 NUnit 还是 MSTest,但在这两种情况下

Assert.Fail("Error message");

测试失败

【讨论】:

    【解决方案3】:

    使用 LINQ 非常简单:

    Assert.IsTrue(links.Select(l => l.GetAttribute("alt")).Contains(transportMode));
    

    【讨论】:

      猜你喜欢
      • 2012-11-13
      • 1970-01-01
      • 1970-01-01
      • 2020-05-04
      • 1970-01-01
      • 1970-01-01
      • 2012-07-03
      • 1970-01-01
      • 2013-12-01
      相关资源
      最近更新 更多