编码的UI继续失败断言

时间:2015-01-18 15:19:57

标签: c# coded-ui-tests assertions

嗨,我知道我之前已经问过其他人,但是我仍然不清楚那些在网上发布的内容因此我发布这个问题以澄清我的怀疑。希望你们能帮助我。

目前我正在使用Microsoft Visual Studio 2013 Premium。我正在使用记录和播放功能。我记录了一些动作和一些验证点。现在,当验证点失败时,脚本将立即停止。但是我希望脚本继续运行,即使某些点失败了。我在线阅读了一些选项但是我不知道我应该把它放在我的脚本上。 我看过这篇文章Coded UI - "Continue on failure" for Assertions但是我没有使用SpecFlow是否仍适用于我?我应该将这些代码放在哪个部分?在我的方法里面?创建一个新方法?或?

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");
}"

2 个答案:

答案 0 :(得分:0)

断言,并不意味着使用Assert.SomeCondition()。只需使用简单的条件来设置thisTestFailed。 Assert类抛出AssertFailedException来表示失败。不应捕获此异常。单元测试引擎处理此异常以指示断言失败。

bool thisTestFailed = false;
if ( {someCondition} ) { thisTestFailed = true; }
if ( !{someOtherConditionWhichShouldBeFalse} ) { thisTestFailed = true; }
if ( {yetAnotherCondition} ) { thisTestFailed = true; }
if ( thisTestFailed ) {
    Assert.Fail("A suitable test failed message");
}"

甚至更容易:

bool thisTestFailed = {someCondition} ||
 !{someOtherConditionWhichShouldBeFalse} ||
 {yetAnotherCondition}
Assert.IsFalse(thisTestFailed, "A suitable test failed message");

通过这种方式,您可以获得所有“测试”,但只能获得一个Assert.Fail

答案 1 :(得分:0)

链接的问题确实提到了Specflow,但问题的详细信息和接受的答案不依赖于Specflow。

通常,由Coded UI记录和生成创建的断言方法有点像:

void AssertionMethod1()
{
    ... get the values of fieldOne, fieldTwo, etc
    Assert.Equals(fieldOne, fieldOneExpectedValue);
    Assert.Equals(fieldTwo, fieldTwoExpectedValue);
    Assert.Equals(fieldThree, fieldThreeExpectedValue);
    ... more calls of assert methods.
}

使用的断言方法和访问字段值的机制可能会更复杂。

Assert.Equals(...)中的每一个都使用与以下内容类似的代码实现:

void Assert.Equals(string actual, string expected)
{
    if ( actual == expected )
    {
        // Pass. Nothing more to do.
    }
    else
    {
        // Fail the test now.
        throw AnAssertionFailureException(...);
    }
}

因此,链接的问题建议将对记录的断言方法的调用(即来自AssertionMethod1的{​​{1}}的调用)更改为:

CodedUItestMethod1

虽然更简单的方法可能是将... get the values of fieldOne, fieldTwo, etc if(fieldOne != fieldOneExpectedValue) { thisTestFailed = true; } if(fieldTwo != fieldTwoExpectedValue) { thisTestFailed = true; } if(fieldThree != fieldThreeExpectedValue) { thisTestFailed = true; } ... etc. 复制到另一个文件中,然后将其修改为如上所述。 Coded UI中的UIMap编辑器具有“将代码移动到UIMap.cs”命令(通过上下文菜单或命令图标访问),可将方法移动到AssertionMethod1文件中,从而允许您根据需要进行编辑。自动生成的代码进入uimap.cs文件,不应编辑此文件。它和uimap.designer.cs文件都有uimap.cs靠近它们的顶部,所以它们的组合内容构成了这个类。 partial class UIMap文件用于添加UI地图。