如何使用MSTest强制在C#中进行测试失败

时间:2012-06-14 13:29:31

标签: c# webdriver mstest

我正在尝试将一些WebDriver测试从JAVA移植到C#。我坚持的是驱动程序在页面上找不到某些元素的情况,我在JAVA中这样做:

if (second >= 10) fail("timeout - " + list);

因此,如果某些事情超过10秒,则测试将失败并显示超时消息。 我在C#中用

尝试了类似的方法
if (sec >= 10) Debug.Fail("timeout : " + vList);

但实际上这并没有使测试失败,但是我给了我一个选项来使用异常消息框。那不是不,我需要自动测试才能完全失败。然后我试了

if (sec >= 10) Assert.Fail("timeout : " + vList);

但是这会抛出一个未处理的异常错误。我应该在try / catch块中包含Assert.Fail吗?或者我应该使用完全不同的东西来使测试失败?

我正在使用MSTest,如主题中所述。

编辑:确切的信息是:

  

AssertFailedException未被用户代码处理。 Assert.Fail失败了。   超时:someField。

on

  

Assert.Fail(“timeout:”+ vList);

3 个答案:

答案 0 :(得分:5)

我认为您已经看到了这种行为,因为您已将调试程序附加到正在运行的测试中 - Assert.Fail抛出AssertFailedException,您的调试程序会看到异常并中断 - 而您没有得到测试结果。

在“调试”菜单上,进入“例外”,找到AssertFailedException(如果它不存在,则为其创建一个条目),并确保为该异常类型关闭了break on throw。

或者,在没有附加调试器的情况下运行测试。

答案 1 :(得分:1)

Assert.Fail应该是你想要“强迫”失败的东西。在内部,它将抛出AssertFailedException。如果这不起作用,还有其他事情可以继续......

快速dotPeek显示这个被调用:

internal static void HandleFail(string assertionName, string message, params object[] parameters)
{
  string str = string.Empty;
  if (!string.IsNullOrEmpty(message))
    str = parameters != null ? string.Format((IFormatProvider) CultureInfo.CurrentCulture, Assert.ReplaceNulls((object) message), parameters) : Assert.ReplaceNulls((object) message);
  if (Assert.AssertionFailure != null)
    Assert.AssertionFailure((object) null, EventArgs.Empty);
  throw new AssertFailedException(FrameworkMessages.AssertionFailed((object) assertionName, (object) str));
}

答案 2 :(得分:0)

您必须使用适当的mstest语法

[TestMethod]
public void IsSecondsGreaterOrEqualThanTen()
{
    Assert.IsTrue(second >= 10);
}