3

我正在使用带有编码 UI 的 SpecFlow 来为 WPF 应用程序创建自动化测试。

我在“然后”步骤中有多个断言,其中一些失败了。当断言失败时,测试用例失败并停止执行。我希望我的测试用例一直持续到执行结束,并且在执行最后一步时,如果在执行期间存在任何失败的断言,我想让整个测试用例失败。

我只找到了部分解决方案:

try
{
    Assert.IsTrue(condition)
}
catch(AssertFailedException ex)
{
    Console.WriteLine("Assert failed, continuing the run");
}

在这种情况下,执行一直持续到结束,但测试用例被标记为通过。

谢谢!

4

2 回答 2

3

做一个ListExceptions每当遇到异常时,将其捕获并放入列表中。

创建一个具有AfterScenario属性的方法并查看列表是否包含异常。如果为真,则断言失败并显示字符串化的异常列表。现在您不会丢失有价值的异常信息,并且由于该AfterScenario属性,异常检查总是在最后发生。

于 2013-07-29T13:53:04.943 回答
1

一种方法是添加声明 abool thisTestFailed并将其初始化为 false。在catch块中添加语句thisTestFailed = true;,然后在测试末尾附近添加代码,例如:

if ( thisTestFailed ) {
    Assert.Fail("A suitable test failed message");
}

另一种方法是将一系列Assert...语句转换为一系列if测试,然后是一个Assert. 有几种方法可以做到这一点。一种方法是:

bool thisTestFailed = false;
if ( ... the first assertion ... ) { thisTestFailed = true; }
if ( ... another assertion ... ) { thisTestFailed = true; }
if ( ... and another assertion ... ) { thisTestFailed = true; }
if ( thisTestFailed ) {
    Assert.Fail("A suitable test failed message");
}
于 2013-07-29T13:28:49.220 回答