2

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

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

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

编辑:确切的信息是:

用户代码未处理 AssertFailedException。断言失败失败。超时:一些字段。

Assert.Fail("超时时间:" + vList);

4

3 回答 3

5

我认为您看到这种行为是因为您已将调试器附加到正在运行的测试 - Assert.Failthrows AssertFailedException,您的调试器会看到异常并中断 - 而您没有得到测试结果。

在“调试”菜单上,进入“异常”,找到AssertFailedException(如果不存在则为其创建一个条目)并确保该异常类型的“抛出中断”已关闭。

Alternatively, run your tests without the debugger attached.

于 2012-06-15T07:59:34.957 回答
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));
}
于 2012-06-14T13:32:58.657 回答
0

您必须为 mstest 使用适当的语法

[TestMethod]
public void IsSecondsGreaterOrEqualThanTen()
{
    Assert.IsTrue(second >= 10);
}
于 2012-06-14T13:38:05.770 回答