我正在尝试将一些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);
答案 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);
}